{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "9d71306f",
   "metadata": {},
   "source": [
    "Copyright (c) MONAI Consortium  \n",
    "Licensed under the Apache License, Version 2.0 (the \"License\");  \n",
    "you may not use this file except in compliance with the License.  \n",
    "You may obtain a copy of the License at  \n",
    "&nbsp;&nbsp;&nbsp;&nbsp;http://www.apache.org/licenses/LICENSE-2.0  \n",
    "Unless required by applicable law or agreed to in writing, software  \n",
    "distributed under the License is distributed on an \"AS IS\" BASIS,  \n",
    "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  \n",
    "See the License for the specific language governing permissions and  \n",
    "limitations under the License.\n",
    "\n",
    "# Inpainting with Denoising Diffusion Probabilistic Models\n",
    "\n",
    "This tutorial illustrates how to use MONAI for training a denoising diffusion probabilistic model (DDPM)[1] to inpaint 2D images.\n",
    "\n",
    "[1] - Ho et al. \"Denoising Diffusion Probabilistic Models\" https://arxiv.org/abs/2006.11239\n",
    "\n",
    "[2] - Lugmayr et al. \"RePaint: Inpainting using Denoising Diffusion Probabilistic Models\" https://arxiv.org/abs/2201.09865\n",
    "\n",
    "\n",
    "## Setup environment"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "6aa3774e",
   "metadata": {},
   "outputs": [],
   "source": [
    "!python -c \"import monai\" || pip install -q \"monai-weekly[tqdm]\"\n",
    "!python -c \"import matplotlib\" || pip install -q matplotlib\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f3154fee",
   "metadata": {},
   "source": [
    "## Setup imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "dd62a552",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MONAI version: 1.4.0rc6\n",
      "Numpy version: 1.26.4\n",
      "Pytorch version: 2.3.1+cu121\n",
      "MONAI flags: HAS_EXT = False, USE_COMPILED = False, USE_META_DICT = False\n",
      "MONAI rev id: 6a0e1b043ba2890e1463fa49df76f66e56a68b08\n",
      "MONAI __file__: /home/<username>/miniconda3/envs/monai/lib/python3.11/site-packages/monai/__init__.py\n",
      "\n",
      "Optional dependencies:\n",
      "Pytorch Ignite version: 0.4.11\n",
      "ITK version: 5.4.0\n",
      "Nibabel version: 5.2.1\n",
      "scikit-image version: 0.23.2\n",
      "scipy version: 1.13.1\n",
      "Pillow version: 10.3.0\n",
      "Tensorboard version: 2.17.0\n",
      "gdown version: 5.2.0\n",
      "TorchVision version: 0.18.1+cu121\n",
      "tqdm version: 4.66.4\n",
      "lmdb version: 1.4.1\n",
      "psutil version: 5.9.0\n",
      "pandas version: 2.2.2\n",
      "einops version: 0.8.0\n",
      "transformers version: NOT INSTALLED or UNKNOWN VERSION.\n",
      "mlflow version: 2.14.0\n",
      "pynrrd version: 1.0.0\n",
      "clearml version: 1.16.2rc0\n",
      "\n",
      "For details about installing the optional dependencies, please visit:\n",
      "    https://docs.monai.io/en/latest/installation.html#installing-the-recommended-dependencies\n",
      "\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import shutil\n",
    "import tempfile\n",
    "import time\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "import torch.nn.functional as F\n",
    "from torch.amp import GradScaler, autocast\n",
    "from tqdm import tqdm\n",
    "from monai import transforms\n",
    "from monai.apps import MedNISTDataset\n",
    "from monai.config import print_config\n",
    "from monai.data import CacheDataset, DataLoader\n",
    "from monai.utils import first, set_determinism\n",
    "from monai.inferers import DiffusionInferer\n",
    "from monai.networks.nets import DiffusionModelUNet\n",
    "from monai.networks.schedulers import DDPMScheduler\n",
    "\n",
    "print_config()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be99fa93",
   "metadata": {},
   "source": [
    "## Setup data directory\n",
    "\n",
    "You can specify a directory with the MONAI_DATA_DIRECTORY environment variable.\n",
    "\n",
    "This allows you to save results and reuse downloads.\n",
    "\n",
    "If not specified a temporary directory will be used."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "8fc58c80",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/tmp/tmpygu3k1f8\n"
     ]
    }
   ],
   "source": [
    "directory = os.environ.get(\"MONAI_DATA_DIRECTORY\")\n",
    "root_dir = tempfile.mkdtemp() if directory is None else directory\n",
    "print(root_dir)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a36b12f0",
   "metadata": {},
   "source": [
    "## Set deterministic training for reproducibility"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ad5a1948",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "set_determinism(42)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b41e37b3",
   "metadata": {},
   "source": [
    "## Setup MedNIST Dataset and training and validation dataloaders\n",
    "In this tutorial, we will train our models on the MedNIST dataset available on MONAI\n",
    "(https://docs.monai.io/en/stable/apps.html#monai.apps.MedNISTDataset). In order to train faster, we will select just\n",
    "one of the available classes (\"Hand\"), resulting in a training set with 7999 2D images."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "65e1c200",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2024-09-02 17:24:04,809 - INFO - Verified 'MedNIST.tar.gz', md5: 0bc7306e7427e00ad1c5526a6677552d.\n",
      "2024-09-02 17:24:04,811 - INFO - File exists: /tmp/tmpygu3k1f8/MedNIST.tar.gz, skipped downloading.\n",
      "2024-09-02 17:24:04,812 - INFO - Non-empty folder exists in /tmp/tmpygu3k1f8/MedNIST, skipped extracting.\n"
     ]
    }
   ],
   "source": [
    "train_data = MedNISTDataset(root_dir=root_dir, section=\"training\", download=True, progress=False, seed=0)\n",
    "train_datalist = [{\"image\": item[\"image\"]} for item in train_data.data if item[\"class_name\"] == \"Hand\"]\n",
    "batch_size = 64\n",
    "num_workers = 4"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5d503ec9",
   "metadata": {},
   "source": [
    "Here we use transforms to augment the training dataset:\n",
    "\n",
    "1. `LoadImaged` loads the hands images from files.\n",
    "1. `EnsureChannelFirstd` ensures the original data to construct \"channel first\" shape.\n",
    "1. `ScaleIntensityRanged` extracts intensity range [0, 255] and scales to [0, 1].\n",
    "1. `RandAffined` efficiently performs rotate, scale, shear, translate, etc. together based on PyTorch affine transform."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e2f9bebd",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Loading dataset:   0%|          | 0/7999 [00:00<?, ?it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Loading dataset: 100%|██████████| 7999/7999 [00:06<00:00, 1314.68it/s]\n"
     ]
    }
   ],
   "source": [
    "train_transforms = transforms.Compose(\n",
    "    [\n",
    "        transforms.LoadImaged(keys=[\"image\"]),\n",
    "        transforms.EnsureChannelFirstd(keys=[\"image\"]),\n",
    "        transforms.ScaleIntensityRanged(keys=[\"image\"], a_min=0.0, a_max=255.0, b_min=0.0, b_max=1.0, clip=True),\n",
    "        transforms.RandAffined(\n",
    "            keys=[\"image\"],\n",
    "            rotate_range=[(-np.pi / 36, np.pi / 36), (-np.pi / 36, np.pi / 36)],\n",
    "            translate_range=[(-1, 1), (-1, 1)],\n",
    "            scale_range=[(-0.05, 0.05), (-0.05, 0.05)],\n",
    "            spatial_size=[64, 64],\n",
    "            padding_mode=\"zeros\",\n",
    "            prob=0.5,\n",
    "        ),\n",
    "    ]\n",
    ")\n",
    "train_ds = CacheDataset(data=train_datalist, transform=train_transforms)\n",
    "train_loader = DataLoader(\n",
    "    train_ds, batch_size=batch_size, shuffle=True, num_workers=num_workers, persistent_workers=True\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "938318c2",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2024-09-02 17:24:41,370 - INFO - Verified 'MedNIST.tar.gz', md5: 0bc7306e7427e00ad1c5526a6677552d.\n",
      "2024-09-02 17:24:41,371 - INFO - File exists: /tmp/tmpygu3k1f8/MedNIST.tar.gz, skipped downloading.\n",
      "2024-09-02 17:24:41,373 - INFO - Non-empty folder exists in /tmp/tmpygu3k1f8/MedNIST, skipped extracting.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Loading dataset: 100%|██████████| 1005/1005 [00:00<00:00, 1371.63it/s]\n"
     ]
    }
   ],
   "source": [
    "val_data = MedNISTDataset(root_dir=root_dir, section=\"validation\", download=True, progress=False, seed=0)\n",
    "val_datalist = [{\"image\": item[\"image\"]} for item in val_data.data if item[\"class_name\"] == \"Hand\"]\n",
    "val_transforms = transforms.Compose(\n",
    "    [\n",
    "        transforms.LoadImaged(keys=[\"image\"]),\n",
    "        transforms.EnsureChannelFirstd(keys=[\"image\"]),\n",
    "        transforms.ScaleIntensityRanged(keys=[\"image\"], a_min=0.0, a_max=255.0, b_min=0.0, b_max=1.0, clip=True),\n",
    "    ]\n",
    ")\n",
    "val_ds = CacheDataset(data=val_datalist, transform=val_transforms)\n",
    "val_loader = DataLoader(val_ds, batch_size=batch_size, shuffle=False, num_workers=num_workers, persistent_workers=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a56a4e42",
   "metadata": {},
   "source": [
    "### Visualisation of the training images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "b698f4f8",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "batch shape: torch.Size([128, 1, 64, 64])\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAE4CAYAAACKfUBxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB4LElEQVR4nO2dSewmx12/vwG8zD7j2ffFM/aMHeMlARIQSwQcAIljJCQuiBNc4YCEwoED4oCIEOIQCYG4gFgkDgiBRCIUcFbH69hjz+bZZ36zevbYDpD/9d+f+tjvh3K//Zsxz3OrVnV1d3XVt+ptvfXUJ77//e9/vwAAAAAAAAAAACbkBxb7BgAAAAAAAAAA4P8efJQCAAAAAAAAAIDJ4aMUAAAAAAAAAABMDh+lAAAAAAAAAABgcvgoBQAAAAAAAAAAk8NHKQAAAAAAAAAAmBw+SgEAAAAAAAAAwOTwUQoAAAAAAAAAACaHj1IAAAAAAAAAADA5P5Rm3LJlS3Psv//7vwfp//mf/2ny/MAPDL97feITn2jyfP/73595fXeeXk+vVVX1ve99b5D+oR9qH1mf47/+67+aPCtWrJh5T0uWLJl5j+767noJWpY+qyv74YcfbvJcunRpkH7wwQebPO+9997M+3Hv/wd/8AcH6d537d6tlq1pV1ZStsuTHHP3+MADD3xouqqtb9eO3LPpMVe2vu+lS5c2eZYtW/ah91NVtXbt2ubYqlWrBulr1641eV544YVB+rXXXmvyXL9+fZDW/uiO6T1X+balx5I8jqScMc+b1/VdO9Z25OJR0tbde9M26c5zcWPW9dNxRK/n+pGe5/LoPSZjnbvPJI4kz3H37t0mj+u3WrZ7t9qX7ty50+TRmPTQQw81eW7dutUc03jz3e9+d2YeN9bo9V1bc/Wvx9z4m7RtHVs///nPN3m++MUvNscA4MPR/paMB4uNi+NjleXij44JLv4pV65caY795V/+ZXPs3Xff/dBrOd5///2ZeZJ7rMrG1rHyJPO/5LzeuWZy3wlJ2enzz+v6Y86Rk3vsnVsrvX3b9duxyk5iRDLXTHBzO+3Lbq65ffv2QfpnfuZnmjw//dM/PfP6/FMKAAAAAAAAAAAmh49SAAAAAAAAAAAwOXyUAgAAAAAAAACAyYmdUr30+FpSdJ1p4hlx11KHiFtTuXLlyuaYrut0ZTvPj6Lrs916zcTFkay7dU6RPXv2DNLvvPNOk0fXnVdlz6/Xc74WxZXj1qcn6+yTdbV6XrqmWZ/N1W3SRvVY4r1xZSdryBOnUOr90fbnfGXqcHF5Vq9ePUjfvn27yZM4DBw9Lqax1qbfC2j9uzaqz5usV3dxLXFhJP68xPuWrN93JDEyyZPUUVUWo7Qs19a1HOc4dGVrfTtfnTqc1q1b1+S5evXqIO2e1XneNEYk8djFCHVouTE6wfXtHvfCxylG/F8iGX+T9tDr60jaX+88JvHc9fqaxnIojeW0mZoxHVJTcejQoeaYOj6rvAtQ0XfkxnGdRybjkcuXzP978/S6kMbyTqWep57rJ9fqdTON5dSa0vs6Jj1jQuom7rl+r5vUof3Gza10HFm+fHmTR53Cu3fvjq7fXKvrLAAAAAAAAAAAgI8AH6UAAAAAAAAAAGBy+CgFAAAAAAAAAACTEzuletdrjrXOcywXhFvTnDh9EheK84xcvnx5kE7W+brru2f93ve+N0ird6Oqdb+sXbu2yaMOH+evcg4ZrRPnFFE/ylhrmj/oWA/63lxdq5unqn1Pro4Sp1PilBjr+XvXNLtnUxeN847pea4cbRPOe7NmzZpB+vr16x94r/Ogx02V5ltsP422iSRGpe2xZy180kZ7x4PkvOR9pP0occppbFHHWlXb15x30HkPNUa7OKbjiBvr/uiP/mjmtTRPVdtPna/gzp07g7SLfxoTpvbQ9Dg97gXm5cJIfRnJ2NrT31LvYY8fbsy5RjJu9Pii0vbX8/7nOdeCPnrmbS5Gu98WOiYkvzXcOOKOJXmStj1Pp5Qbb2adl7ihknKTa6XXV+bplBrzd1xvWfM4p2o875MjdZGOcS2H6//aTpPvD65t63eD3vrnn1IAAAAAAAAAADA5fJQCAAAAAAAAAIDJ4aMUAAAAAAAAAABMDh+lAAAAAAAAAABgcmLRea/8cp6i8x6JpRN0aTkq9auqunnzZnNM86mMuarqN37jNwbpPXv2NHmuXbs2SKt4vKrq7NmzzbF///d/H6R/4Rd+Yeb1Dx482OT53d/93UHavUdXb1q3TpDupGnKWGLhXvmbin17y3H0iK7Ttp5I1LX+e2XQrk+otNhJ/LTdqPje3aMrJ2GeMtqxrj+1MDZp2z3P3yvD7R1HklifypcVbX9JX0vbqF7fiV5V4u1E/7pBgCtHN9WoavttsonHc8891+RZunTpIO3qaMOGDc2x8+fPD9JuM4xEdJu8I8dYfVtx11+1atUoZSd9q3eMSBhzrO2ReI+1GUHKPON2Ij9OROvJZjyubD02lsQ3nevrMXff98MmAslca56MtamTbirh8vXKyHWscXNGh9atu+8eiXgq+u5pb+4cve8x55E9MvDeMWKe10/OG2scS67lmGeM7P1tM+taDvesboOcns043KZW+o0k2RzOwT+lAAAAAAAAAABgcvgoBQAAAAAAAAAAk8NHKQAAAAAAAAAAmJy5O6V61mem60d1zaJbr56s4UzW6yfrbG/cuNHk+dmf/dlB+jOf+UyTR9dnrlixosnjnFKXLl0apP/iL/6iyaMOn9/+7d9u8qgv5Pr1600etz5Uz0ucQvciSRtJfAm93pvkfno9Iz1OCVeOuyctyz2/Xt/5CtRN5a6vvrLe9eq9LqSx1suPRa+/r7ePrl+/fpDWd1ZV9c4778ws261FT3wdve12Xt7DebrBnJtP+5aLx5/61KeaY0899dQgvW3btiaPjhF/9md/1uQ5efLkIL19+/Ymj45HVe1Y9t577zV5EqectpvEVegYq/+7PqPjYVXmYtGyEqfGPL07i+10GtPF0uMC6m0jSVmubWtbdn1b24hr/0lsc9fXttTrVEnqaJ6+mLEYyylTNZ6Lque8xPvkSOafY8XRj3JeT54pmdqxfK89v2PKe5ynG7b33SZja0JvOb2+Nv3d5vLo9Z0/NIF/SgEAAAAAAAAAwOTwUQoAAAAAAAAAACaHj1IAAAAAAAAAADA5fJQCAAAAAAAAAIDJiUXnDhVbpYLmWaQSN5U9JvKvRBCaXl/LdqLTX/mVXxmkXR3pseeee67J8yd/8ifNsQsXLgzSn//855s8v/d7vzdI/8RP/EST50tf+tIg/eCDDzZ5nCDx5s2bg7STHyeiTaVX4tormtPrjSnj0+dNhOFOIpfcd3L9MSXS2iZcOYnEWMtJRevzolcq31u20itDdSQxctY5VVUbN2780HRV1cWLF5tj165dG6SvXr3a5NH379p10o56Rcc9mwGk/SgRlKvY/IEHHmjyLF++fJB2Uvmf//mfb4597nOfG6SPHj3a5Hn22WcH6b//+79v8nzyk58cpDdt2tTkeeaZZ5pj//qv/zpIu7FF320i0UyZl1h2zI0WEnrnWmONbWPJX5PNOJKyk77mrtd7j/MUFGtMSMb1tI88/PDDg7TbaCRpW3pPyTzWneeeXzcx0I0X5k1PbEnPGWss72l/vVJ5V//JO0n6mrunZDOIpB0lcaR3Ht1zTlpuz2/S3g2kejds6omRvXG09/oJY42/vee4Z0vGtqTs3g3bkraV5NFNbJJNFRz8UwoAAAAAAAAAACaHj1IAAAAAAAAAADA5fJQCAAAAAAAAAIDJiZ1SU7tQFLcWU9ewO1+HkqypdOUka3idU+nu3buD9Jo1a5o8ul7bXd+5OPQ8d/1//Md/HKTv3LnT5EmeX90EVa1Tyq1h1XtMnA6OeTodtB2la6GTdc7JennFOWUSh0PiPXP09u3EV6W4tqV14p5f2596eKr629GYDrEpy+6h19em68OXLFnS5Nm2bVtzTN+b8+6pd0rjiqM3jji0Tlwc0+ul10rO0z7hxprVq1cP0q7+v/jFLzbHvvCFLwzS6qaqqvqrv/qrQXrFihVNntdee22Qvn79epPn+eefb47pfTqnzY0bNwZpN9b0tltlnuPIPD0bvfS221n0ejcTX4yjdxzrGdt6x5HemNTz/K5c17dWrVo1SC9btqzJkzidNEa5a7n5p8Yy5xlRF8k8medvlHuNxPFZlfmaetyg7lpu/jeW02jWOWOe1+vr6nUaaz8a06mUvP95OqV6zuutxylJvaOJUyrx/iluHunqTX9vJb81k9jSG2v5pxQAAAAAAAAAAEwOH6UAAAAAAAAAAGBy+CgFAAAAAAAAAACTw0cpAAAAAAAAAACYnI8kOp+XNDAVpKnIy4m9VMjoJF5atsvTK1p3YklF5eNO9OrEsuvXrx+k//iP/7jJo0Lo3//932/yqPz2ypUrTR5X/ytXrhykVepe1crPxpTP9bQ/d04isR9L9J+Uo+LR9Hq9MvLkvhP5XSLWSwSpro6c2Dyhp72NKchcbJK2re/ExbGFhYVBWmPPBx1bt27dIK3iXYdr/yrDTUWjPf02ERYnGya4Yy5Pcn19Jy6PE5Q/8sgjg/TFixebPCoad+gGHb/2a7/W5HnhhReaY3/7t387SK9du7bJk8SRROw5T3o2tUjPG+v6YzGmRHcsQfBYedz1xxq3eyW+PSQxoqodN3XDhKqqnTt3DtIas6ta+fnt27ebPLdu3WqOXbp06UPLqZp23FzsMTqZoyWxLhmjnEDeieaV3k0ltP2l5dwP8vmxNtpwzGuM6GWeovN5Xj8p5+NC7/cYN7dKNtFI5qgaW1ysT+CfUgAAAAAAAAAAMDl8lAIAAAAAAAAAgMnhoxQAAAAAAAAAAEwOH6UAAAAAAAAAAGByYtF5IujrFYupfKtXRqnCZHdPibDOXWvp0qXNMb1vJyhU+VdyfSf6PXToUHNMJZZObPjggw/OvL6K1vWcKi8t0/OWLFnS5FH5pXtHvdyPsrtEUNkrI3eMJXpO5f+Kiu5d2VpO8vxjSa0dY5adxEh9/t4YlbQtJ5p3glxF+/rx48ebPO6+VaKr7aGqvW8Xf06cODFIO/G92yCiJ0a4+kj6iHs2rRMnmtWNJlw5ek+ujlyd6Jigm1NUVf3O7/zOIO3Gn89//vODtIsHiaBen7Wq6urVq4O0e36tN3d9d56O0WPFH/cep5S/pjFqnvLbJI/W7VibSPQ+V+9mIFOStNFkw4Sqtv27OdpnPvOZQfrHf/zHmzzat1Rg/kHX1/v80pe+1OT5+te/3hy715nnxk9jlZ1sPOPKTiTGyf2kcvCe/j/mphLzkminmzokv3+TzUD0N5qbD7m4oWP0Aw880ORJJPbJ7xjHWBJ1PebGaDdH0POSeUSSJ90MR38Tu9/x+i5d/feOET2/N9wcOZlHJfBPKQAAAAAAAAAAmBw+SgEAAAAAAAAAwOTwUQoAAAAAAAAAACYndkol6xOn9veka5b/fxJfhPN1LFu2rDnm6kTRdb5uLaZe79vf/naT51vf+lZzTNewfuELX2jy6PrUhYWFJo96Bt55550mj3PRaNk3btxo8qxevXqQdt6T3rWn82p/vWvRE6dP7/UW243Vu857sWPElHWbrPN2aB0lsdY5BZLnSPxR7vpa9pUrV5o8zhenDqM1a9Y0eTZu3DhIr1ixYuY9nTlzpsmj3quq9nldHEucGnqee6/unSjORaAOB+d00OsnbgRHkseV/Td/8zeD9J/+6Z82eW7evNkc27JlyyB97dq1mdd3datt4u7duzPLcYzlNJq6bKU31oxF+qxjzdF6nX697pdZZafeH41bY7233jnK7du3mzwvv/zyIH3s2LEmz9q1awfpJ598ssnz4osvNseef/75QfrcuXNNHp3/Ojfdx4Wk3/R6R3u9cz30PkcvPWX1Oq3G9FXNKsfhxn/nR1L0d5yb67ljOrdI5oi9jOVrdb/Rdd7iynVOPf3d6uYx+lvXzXW1Ht081tWtepedC0xjopujJd4px7x+k/WWyz+lAAAAAAAAAABgcvgoBQAAAAAAAAAAk8NHKQAAAAAAAAAAmBw+SgEAAAAAAAAAwOTEovNEEN4rmuzFyb5m4e5RBbWpjFtla04spvIxJxFWid3y5cubPE7+qCK1f/iHf2jy6D098sgjM/O453CCNn0WV0d6372CxKnbVs+1emXgPdeqyuSPPYLIVFg7pVgziTVj0SvVTeTTY9WRiyPuHfWI5t1zaP93Um+3iYLGPyeI3LFjxyC9a9euJo9uNOFkkG+//XZzTMXaiWjcSUX1ed3zu7L1PbnzVD68dOnSJo/eU9r+k9ie5HnhhRcGadeO3LtN7lvfrbu+SuyTTUZSevpoutHAWPH/XtvoIh0jNm3aNEivX7++yaMSWTf/0j7iNlVx96TvaSxBtCtnSol5OkfSmOTmka+++uog7dr23r17B2knOt+zZ09z7Lnnnhuk/+mf/qnJ82//9m+D9GLP9aZmLIn2rHKrsvaYbHSSXO9+2dQmqZNEht57LT3m4p9KtJNNVdy13NxG51JTyvDdMZdH26Sba+h5Ls/169ebYzr/+NVf/dUmj27Y5WT03/jGNwbpn/u5n2vyPPPMM82x3/qt3xqkDx482OTRbw1O9J60CUcyl+wZIxGdAwAAAAAAAADAfQMfpQAAAAAAAAAAYHL4KAUAAAAAAAAAAJMTO6WS9YGJd6YXt+5R15n2rsXX+1Z/RZVfi6/r9XXdb1XV+++/P/OedH3q3bt3mzxuLfDNmzcHaXVMOdxzKG69qjtP79utRdd7dOt8e/1A8/QKJcxz7XXPeYmLobfOetcQ9zzbPJ0S8/S1OO9aj3dvTBdDcn2Nfy7WJLgYcerUqUHa1ZEe279/f5Nn9+7dg/SqVauaPM6X98YbbwzS586da/Lo87t71Nie9iPNl/g61J+TlPtBx3pcGEnZznuVjBHOxaBOITdG9DKWC2Esp1SPY8ix2I6dNI6qL27btm1NHm0TzhenbrjXX3+9yXPlypXmmM6lXGzrGRPTMSrp/4kLJHEDJi5Q573T8xKnoJvrvvnmm80xjeUHDhxo8nz5y18epHvr6F6kp5+O6R1NztO21etG0zyp9zKh5/dn4phLr9XjkEpjpJatHr6qqpUrVw7SZ86cafLcunVrkHZjbeJUdr9Ztawx/V16LInHbq6R+AOd09B5phSd7/zoj/7ozDyu/etcp6p1iLk8br6r6Htz77+XpG1r/ff2df4pBQAAAAAAAAAAk8NHKQAAAAAAAAAAmBw+SgEAAAAAAAAAwOTwUQoAAAAAAAAAACYnFp33iO6q+mTMjuQ8J7FLRL+JxDYRezn5mpbt8qjEzonXnFhShbAXLlxo8ijJszlBm5Of6/M7QfDy5csHaScanacMP2GxpbHKPEXfjjGlmbPy9Iq+F1tqr6R1ljx/z4YN6fUTiW0PLh65+KsSxxMnTswsW+NhVdW+ffsG6TVr1jR5du7c2RxT0bHKQKtasbh7Rxr/XP07QWgif9VjY24Ykox/esy1Ec3jntXJz/X9uzayZMmSmWWrtHPMeNCz0cD9Il7u2eiiV9juzltYWBik9V1XVa1evXqQdqLzLVu2DNI6r6iqOn/+fHNMhcBOhq4xwb3bpI86tL6TOWoi+k43Okjaqda3m6Ppe/znf/7nJs8rr7zSHPvKV74ySOuGFVXtWOLmkTA/xtoMRxlTap5IzJXeGN07/+qNkcqePXuaYxs3bhykXYw8evToIK1j7weh432yGcKYvxl66juZR7g44s7TePfXf/3XTZ6/+7u/G6Rfe+21Jo/WmxuPfuEXfqE55jZWm3WPrs70e8CYvxl75kiIzgEAAAAAAAAA4L6Bj1IAAAAAAAAAADA5fJQCAAAAAAAAAIDJ4aMUAAAAAAAAAABMzkcSnasQb56ic4eWlQjyHIno25FIbLVslZFVtUI2JwN18km9npMP6z06YbmSiqYT+Z2K5cZ61x+lrFn0yvh6GUssmby3eQoKk+dI4shii+d7nzVpo73yv0RQnsTfsQTNvTJad/3Lly8P0k6GrjLktWvXNnlUhlyVSXSPHTs2SL/zzjtNHpWGuljv3r8Kul3b0tiu57jzemNGet+zcOc4Qbm+bze2Ka4dL1u2bJBWgf0HnZcwlmh16nGj51pjSXzTZ9XNV9z8R9u/2wxG+/+qVauaPI8//nhzbMOGDYP0qVOnmjwnT54cpK9du9bk6Y2bvWL5WSRzzapsowudEyYb3bz++utNHief13d55MiRJo9uWnHp0qUmz/3AWHOrxd7UZp6bykwZo3rLTuZRvb81k7LdZgwqOt+/f3+TR+XnBw8ebPK4spONFnTeNM/fEb1l6z2638NubEnmJH/4h384SLs54vbt2wfpbdu2NXnc73h9b05ir3Xinu29996bmWeszcDm+R75pxQAAAAAAAAAAEwOH6UAAAAAAAAAAGBy+CgFAAAAAAAAAACTEzulxlqLOGYevafEe+TW9Pa6KHQNq/M16RpSt6ZffSXqz6jyToNbt24N0itWrJh5j877offk6lHXq1a1a1bds+kaXrfONaHXRdTrOVIWey2+Y6y+1XtO4rlJ/Wyzrj/WeuV5+rscSd9KYtRYLqgE9856Y6SW5cq5cePGIH3o0KEmj677f+6555o8u3btao6pr8TVo97j0aNHmzzqEHDvP/G1uPM0Js/zXSfeM3ePznOluHerLiDndFA/lBv/1IWReCAcyfMnMcK5ye5FF95Y5fSWrfMG9TdVte9W24w7pq6oKu+U02NujqR+quPHjzd5zp8/P0i7dpzEbTf/0bY0lr+1qo1tOmesauNPr3fHPZuW7frNlGPb/UDvPLa37LHo9R4m3s2ePGPGsR43aNpHNZ9zai5dunSQfuyxx5o8e/bsmXkt54JznilFx//e+WBC4ibWeV1V1c2bNwfplStXNnnu3LnTHNO45bxPX/nKVwZpN//45je/OUhv2rSpyfOlL32pOaYuvsQfnfhLF/sd4ZQCAAAAAAAAAID7Bj5KAQAAAAAAAADA5PBRCgAAAAAAAAAAJoePUgAAAAAAAAAAMDmjis7nKeNzZSeCRBWE9QqrE2meCsurWmmrE4Y/9NBDg7STUbp7UkGbOy8RTat80p3jRLda/06spqLfqaWWPTLwqYW1Ywki03Y7K8+Yz99z/d7nGIve67t+o2JdJ9pVbt++PfOYkyEm99QrsZ1VblqWO0/vSYWVVVVvvvnmIO2eX4XZVVWPP/74IP3EE080eVRQrvG4qurChQuD9NWrV5s87pjGe/f8Gsddnp4NA6ratuxk7Fr/LkZrnuQ9VvkxUdGxxZXz8MMPz8yz2Mxzg4beTS3G2uii9zm0nbiNVrTfXL9+vcmjYlnX11xM2Ldv3yC9fv36Jo9Kcx955JEmz5EjRwZpjQdV/r5ViO76lvbJZI6UzhG0LN2woWq8jV4S0bq7lotJ9xrJpjpjMc8NC5J3nbyPJEZMvfFPr9hZz+uttx4Zuzvm5jFu8wVF5zY//uM/3uRx88//+I//mHn9Hol875wlaf/Xrl1rjun1FhYWoutpO3WbWKiM3AnTtW7dGOU2g9A5kvutvXbt2kHayelVhu/o3UShZ/xHdA4AAAAAAAAAAPcNfJQCAAAAAAAAAIDJ4aMUAAAAAAAAAABMTuyUStbHujzJWlxd09jrdHLomnp3TrKGf9WqVc0xdY/ouk+HWy+qa7idd8qt81XPjHOxqMPBOR10La6rf3eekni/XHvQ8xKnSVW7PjfxpfS6gZI2mfQRV45ez7kx3HlJv5l1P2mepOyk//feY9JGk2PpOv9Z5bhzVq5c2Rzbv3//IK1ulKp2Tblb067HXB7nC3ExQRnr+RN64/jly5cHaXXVVfl+q3HzwIEDTZ5t27YN0u49qkPg0qVLTZ4bN27MPHb+/Pkmj/Z35xTT+ndjhIvRGiPd+KO4etSy1bFQ5eNW4itMXBR6zI0R7tn0npIx4n5w3KT9r6ef9sbIpCz3bhOnUuLUc/et19uzZ0+TZ/PmzYP0M8880+TZtGnTIO0cL65va0x23imNUa5vJySxVfujo9epmPQtR68LaEp623+PV2ksp5TrI67/JU4lJZmjOXrnaNpue377fVDZPb8/e+exyW8kN7dRh5J7t9r/nGPoqaeeao5pWc8//3yTR+cx7h5nlVuV1UnSjlyMTH4j9PrCdI7uYp22UTcfSdqNc5rq+KeOzar2Odw9urrV95Tcoytby0naiIN/SgEAAAAAAAAAwOTwUQoAAAAAAAAAACaHj1IAAAAAAAAAADA5fJQCAAAAAAAAAIDJ+Uii8ylxgjKVbSWi1USirVLLKi/IVfm5kxirNMzJ5/Q8J6N0gswrV64M0k60q6JjV7aep1K9qkz+7cruEY07iVoidnPyZ8XJ17TdpIJCrROVCrs8rv2pRNiJ7tx5PRL55D26Z036f48w253n2lEiEUwYSwbvcP1/xYoVg/Tq1aubPPpsyXt0eVz/1xjh+rbGCBdHk40OHNrekjjunk3buj5XlY8Ren33HE888cQg7d7Rli1bPjRd5UXz+t5UmFnVvhN3jyq6dHlc/FNBvBO06z25/qd16/K496bvNhHtJhuPOJJ7SkS7rhy9p957TEiE1b0bBvSWPRZjbYbjRLcLCwvNMX2XLkaePXt2kH700UebPNrf3WYIO3bsaI7pvE37Y1XVhQsXBmkXo/W+XV9P3m2y0UAy/+ndMCjZRGDMvjXlZjAfJd//tpze50j6X6+cPjkvia098cCdl8rYdb7j5pY9fSTdsEn7RFKP7vfg4cOHB2k3j3GbODz22GODtIuRL7/88iDtNtDR3z/p7yg9z8U2Pc/9jtP3n36z0OsnbSvdaKWH3jiux5LfEb33lMzRe+GfUgAAAAAAAAAAMDl8lAIAAAAAAAAAgMnhoxQAAAAAAAAAAExO7JQac531WOXo+mR3nq49desenZ9AcWso79y5M7NsdXE475DmSdeCrl27dpB2LiL1hTinga5PvnXrVpPHrfPVtdCuHtX9om4UV7Zz2ty9e7c5prh1tlrfbk27tpHedpys4U/WOTvvjCNxWvW4INK12Mka5gT1rD3yyCNNHj129OjRrmslJN4rh3tv2peWLVvW5NH259xUWkfOzeH61u7duwdp5yJI+r96Blwedyzpt9r+XBxTh5Ir1/mSFNf/N2zYMEh/+tOfbvIsX758kL548WKTx70TbRPu2dasWTNIO1+UtklXjut/GpNdG3377bcHafVHVLV162K0iz/uPpUk/qivIXHjuLISp5XzVWzevHmQdt6hr371q82xhJ65VepmGssFqKT1nzDW3NK1SZ3vuBipTifnptq/f/8g7ZxyGiOqqtavXz9I65ytqh3bnK9F403inapqY7Kro8RX1OsCVebpYnNM6UtLSJx2Y/XZ9FkTX07ia+p1ivW0LfdbQ39HOMePeoCr2jHRzS20bPcceszlce9fx3v3bMlvFB2jX3vttSaPiz8a25xTWX2Zr776apNH78nVf/Jb2z2bzi1cHOtx7Lqy3diWlKPXT/p6VZ/DLXFK9bqBk+fv9Qcn8E8pAAAAAAAAAACYHD5KAQAAAAAAAADA5PBRCgAAAAAAAAAAJoePUgAAAAAAAAAAMDmx6NyRSAQT0XIi8XTnqeysV/6nx5zU2wmCVeLqRH8qpHQSzdWrVw/SKjWuyqR97rxdu3YN0hs3bmzyqAzTyejc82v9O9GtlpVIBJ2M1ImFVVDq7jsRjet5iTC9KhNUJoI6FSI6GXPSbtPzFL0n19ZWrFjRHFNpt5NIqsRVpc6ubNeOdTOAXtF5r3wvwfURlUirMLKqfX6V41a1Mm4n1XUS9ZUrVw7SKj6vavufk+jqpg5OxutE41qWe/6rV68O0okMMxFNVrUSURfbz549O0jv3bt35vWdjN/JrzW2uufXfuueX+vfPb/2kapMPrx9+/ZB+umnn27yaH/Tdl3l241KZN19a39P4q+LUUnc2rp1a5NHpdVaH1XtGP0jP/IjTZ4///M/b45p/HXvIxmjtBxXR07QrvmcIFbbn7t+72YYi40+m5tbJKJhrUdX/3v27GmO6Xjn3pG2f7dhhMZx9xwuJmts1XRVG5Pc82u/TePv/UgyR0gl4lpWr0RZceUkfTSZRyYbRvQK490cNWk3ybNp39q5c2eT58CBA80x3YzJ/dbQuY3bMET7n7tHt4lN8hshGUc0jh0/frzJ437HaGz5sR/7sSbPL//yLw/SLv4cOXJkkE7Gmqr2d7Qbx7UsV0d6XtLW3THXHpP4p+/R5ekVlCckG1Y4tC25NpL0/7Geg39KAQAAAAAAAADA5PBRCgAAAAAAAAAAJoePUgAAAAAAAAAAMDl8lAIAAAAAAAAAgMmJRee98r9EiJdItNwxFaQ5sZwK6RL5nxO2OmmbSuvcPap8zonOVBDtpNJObLxp06ZB2gna9JgT5KnYzMn4nKBa5btOYqf1pue4PDt27GjyPPXUU80xFRSePHmyyaMSY/dutU2459D36Ej6iHtH+vzJO6pqxcZOEK7yaxX2VlWtXbt2kFbxYZVvE3p9JyjUOnHPpm1b76fKi6XHItmMIcnjUEGmE11r3Wq7rqq6cePGIO02LHD1prjYou0meY9O9KnxqKqtp/Pnzzd5kj6qEnkn2kyEqa79aVmHDh1q8uiGEfv27WvyONG49lu3GYDK150MWTeIcFJjJ3FPJNraJlxf279//8zruxipdeskztq2dFyvatuki4dujNR452KbnufekV7PjYeJxNiRbJihuL7u+naCXi8R7bt33bvRjOLG36QdOxJBsj6vi236/GfOnGnyuLFV25br2yrWd/Wv5bgxwl1fJf5u/qVi59OnTzd5VJDu5sOORBCciLZ7rtVLcv3kOVy+RNDsxhHt2+5d927+0lvfPbjnT+bfisujfcvFcTdv2rZt2yDt+r/O49yGVadOnZqZx43RGkvd+Of6raLzSBfrzp071xz7xje+MbPsT33qU4P0L/3SLzV5dIx0MVLnsVXts7nn1/ediLbdXK93jO6JUS6Pm6Pqe3L33fP9xT2rKyeJ0Ukc0zy9G1/wTykAAAAAAAAAAJgcPkoBAAAAAAAAAMDk8FEKAAAAAAAAAAAmJ3ZKOXrWIie+qLRcXdeerLt0a/r1PPV3VPm1sOrV6F0vr+v1Hc7zoi4C52LR89avX9/kUYeTc4q4Nc2az63X1jpy62W1bPcc7vr6/Lt3727yqHvhwoULTZ633357kHbeH+dC0bXPrm7XrVs3SDtfgLYb9UBV+fevZbm2nayh1vPcmm7nq1I/i2s32ia2bt06M48rR+vkN3/zN5s8Y7kRkjXVDte2dV21cyFo23LxR9ukczNt2LChOaYuCud9Uj9F4h1z7SE5z70jdTGcOHGiyaPHXDx2/UY9C85FpPftfDkak5zTxZWtx5z3SGOEe//aR1x7dL4KjZuu3tRhkzyH3vMHoe3ducD0+q6ONP65WO/qJHFR6ft3LpLEjefatuZzLh7Nk5TjxlodD6va+nfjgY4jLv5rn0jaUVWfrzHxrrg8yXnOc6HP6+KYtgk31l6+fLk5pu9NHU+uLNe2dNx0bjQ3j9RY4uYoOiY4p6fGX43ZVa33rypzgWl7T8ba1B81lq9K+42LI67f6JiUOO3c2KpzIue00/bn+vpY3rde0ripaNxIxj+d11f5GLV3795B2sVWHW8ee+yxJo+2CedmO3LkSHNM++3x48ebPNq2XKxzz6a48ffw4cODtPutofOoZ599tsmjbfv1119v8jinldZJEkdcO0pijTtPn7fXe6bjqLt+Ev9cHr0nd496LI2RSdlalot/rt30wD+lAAAAAAAAAABgcvgoBQAAAAAAAAAAk8NHKQAAAAAAAAAAmBw+SgEAAAAAAAAAwOTEovNEUO4EXQm9YkOVWLp7dEIyReVnTtjljuk9OYmm3pPLk0hU3XOofNKJ9VSs6STiyXtz11exXSJWdKI9FbQ++uijTZ5Lly41x/RZ3D2q6FmlhlVVn/3sZwdpJzp3x/RdOkGlii5dHhWdujxJ23LyVb2+iqerWtGpE407QbbeZ7KJgCNpf1pOKvFTXIzoKav3+k4QqO3WtWMVCzvRsJP4ax89efJkk0ff7a5du5o8KtZ08dC1W61vJ/pXaeiePXuaPCoWd/3RCcq/+93vzsyjx1z81fftpMa6qUNV229VGFpVtXPnzkHayYi13tw9OtGpnuf6v57nYq2+x82bNzd5kg0SXB2p2NRthqD37aT2iaDTxRrNk8QIV46L0fqeEvlqsmGKa0dOoqzxpnczDC3bbargJO6unyja/pJ5nJPhOtG3biLh+ojWiatb7ZPJZgDu+slmNO4dqXx927ZtTR6NdVXtmHDx4sUmj/YlJ3rWeaST6jtB88LCwiDtNqxJZPSJsDzpty5uatzSOaM75mT47jztN4lE38V/fd/u/Z89e7Y5lpAIontw78O10Vn340h+I7nY4/qf1psbf3SO5ETnOm9y85hPfvKTzTHtkwcPHmzyaLw7dOhQk0efw8V1F1t0budihMaRZKMNt2GJ6/9PPfXUIO028dF36ST22rbcb003Rmm7cXFc25urW71e74ZJSRxLROeuHyXjlmsjmsfN9VzZPfBPKQAAAAAAAAAAmBw+SgEAAAAAAAAAwOTwUQoAAAAAAAAAACbnIy0CTNZ5j+VrcWsodX22O0/XOTqnia4XTX0Nzk+i6HpVXb/rjrlndetD9fouj65Pd+uctZwzZ840edatW9ccU4eDW1Oqa9/dmnqtI+cUcJ4bfZZz5841eXQNuXOR6PtXf8IHoffpfBX6Tlzb0nt6+umnmzyubvU85zTQ67m1+Ml66cSX4tDnd2Un5cwTF7dm4WJN4kJIfBkOXeftYo9rf+pi0nRV20ecr0UdMs5psWPHjuaYrvN37V/r0q1X1/ijHo6qrB7d9dXP5eKIjhuuHd+9e7c5puOGW6+vDgXnwtC+7uraeX50bHFOBfU+OV+GthHnlHKesTVr1sy8/qlTpwZp57TT2Jb2v8TFkJSj56XXT9pkMo/SuOH8SYkLwjnF3Jio6LO5d+2ur3HK5dGyXf/X/ufq38VW7ZPOaaLXd2Vr/En8dVVt/atjqap1wbhxXJ/NvTPnedI47eK/zvecdyeJvy4maSx1z69+QFeP+o7cnMHNkbSdOs+NxmhXt9omXTlujqwuIjduqp/HxXGNie766ksdyw1V1TdHcvTG38QNrO/a9WNXjrZJN/5qG3H+tJdffnmQ3r9/f5PH/f7Sd/ujP/qjTR4dR50b9Gtf+9ogfeTIkSaP844m3k+NG65sdUM5f1biGXNjm8YR51TV96bO5Q86pg4t9xtd5y2ubSVuQDe2JS6oZIzScty13Lit+dz712Mu/uhve+eGTuCfUgAAAAAAAAAAMDl8lAIAAAAAAAAAgMnhoxQAAAAAAAAAAEwOH6UAAAAAAAAAAGByPvH90GDn5Ht6qpM/quzLiSZV0LVv374mjxONK06Qevv27UFaxd9VrXzOyfAS0bMK06paQZiTiGk9OtGwk7/pea6OEkGvStNUfOuuVdW+Wydf0+u7sg8cODBIO9F48vxOfqmiU1e3ek9OWOnkcyqIc2I7FQS659D2p/XxQddP5J898r1e8bhrI3rMtZFE9Kv35ER7SR31iIfdseRa9yvu/avEUAWuVV60qxJXV0datovjiTDcxTaVvzv5oo5JLtbrc7g2osJehxN96z06GaWOSa4eVYZaVfX4448P0u696bMkgkwXx1zc1nei43FVK3p395iM/+6daN0mEnNX/0lMdGOblpXECNdG9P27+OeOJfFf69bNkfTZXB9xgu6kb2udOIm2CtqdjNq9N71PN//UeZsbo3SjFSfDdW1U78ltIqOiczePVom3u5aLvxrvXN/WZ3GiZ+3vt27davI4dL7l6k3F6k60ru3fvWs3t9Z2kkjMXTveunXrh6ar/G8kbbeubbtnUbRNujb6hS98YZB2wuw/+IM/aI5p3TphvMZW1/+1H7tY5+KoXj+Rmrt2pPfknsOdpzHRifb1vpNxxI1jTn6ufdTJ0HX+4fq69ptXXnmlyfOtb32rOaa4MVr7jdswQ+/J3aOrEy3LbUaj7e/YsWNNHo3jbo5y8+bN5pjK351EXn/HuU2FNG64zWBcbNHxvndTtSSOubrVeYOLkXrMzSO03br5kMrwHfxTCgAAAAAAAAAAJoePUgAAAAAAAAAAMDl8lAIAAAAAAAAAgMlpF91+AG4Npa5rTjwrbp2vrlfU9bNVfr22riF36+V1TbvzJbh1ropb56xrQd31dQ2nW9Opx9x6TbeGXN9J8o6cL0A9C25NqfNc6Fp4t85c1wK7Zzt06NAg7db9Pvvss80xfRb3jvRZ3DpXXa/r2qhrN9r+3PX1eV0d6Tty67Xdu9XrJS4Yh75bt6bePZuuoXdtVI+5e9T1+s4NpIQqvMhX1UPyrGNer5fkHWmMdm1U1+ffuHGjyeN8Kdr/nNNJ26hrs+ricN43t4ZfnTaJZ8Kt6XdxW3GxRdfru+vrMdfXtY+k3kONUS6Oa5tw96hxzMVx56JwZc0q23k/FPccDn02d9/a3nqdeq5vJXn0vbmYoee5una+pMSForh3lvgqEoeFm8epZ8qNteoLSbwzVW37d96zZIxOnB4uRmi97d69u8mjMco5lXQe697/uXPnmmPal5yvUtube//qC3H36Bwu+i5dbNNncd5PPeZitPvdoOOPe0c6/3dtVNt2OtfSunSxJZmjJG5MrZMx5x5jleXidjJH0f6exFqHi/+KayPa/5Nx9NSpU00e9cdVVb300kuD9NNPP93k2bFjx4emq9p2/OlPf7rJs3PnzuaYzvfdOHL06NFB2rUHjQnud5yWU9XGf+fU2rZt2yD9Uz/1UzOvr67KqqpLly41xxT3+0PLdrFW24gbR5yLTp/N/f7TOOLcdHrfzrHnxmidtya/v9x4qO1/YWFhZjkO/ikFAAAAAAAAAACTw0cpAAAAAAAAAACYHD5KAQAAAAAAAADA5PBRCgAAAAAAAAAAJicWnTuJn4qtUvnvLJyM04nVVKTmxF6JRPDu3bsz8zixnUobnSBOUfGtO+ZEk65svb6Tj6lYzT2HStOcjM0JGvU+nXxUjznRusoHr1y50uR5/vnnm2Of/exnP/R+qto6chJvlWG6968yvqpWSKftqKqVTzrRp0ozXZ9JBI1OPq19xLURrTcn8XR1mwiC9Zir20Ssl7DYUvF7UXSusbRXEKq4vu7EliravXDhQpNHRb+armr7n5NYOrHi9u3bB2knn9RjTjSpgshkU4+qtt84iaqW7YTp2o7ceODqX/toIlp311ecaNiNLVonbvybdU5V36YKVe2zuXlMshmEkgjDHS4eaPtL2pYrxx3TfupitJbt3qOOm26scWXrnMxthqBtwrUtLSepR3dPrmyVj7sNE1R+7aTeLm7p9d0cQeXDTkauYl0nUXby80Tsu2/fvkHajf86b0ik3lWtfNkJehUnUVcZtJORO4m93qeba+j8L5GRJ3Odqrbe3PxPjyWbWCSbCo1JEn96yqlq34l7/iTeJnHMtVHN5/IkmwFoW3Nzbff7Qzdx+PKXv9zk0TmJk/qvWbNmkHabKuzdu7c5pv3fzX80brr+r3Mb1x9c/Lt169YgrfVR1f5u1HOq2ud3cdz9jtM5qnu2p556amYe/d168uTJJo8bIx5//PFB2m30oW3U1a3GERcjXPzTuaTrf8mGKfobNdkcxME/pQAAAAAAAAAAYHL4KAUAAAAAAAAAAJPDRykAAAAAAAAAAJgcPkoBAAAAAAAAAMDkxKJzJ79KBMWJaFwFXU505gRxek9OoqryUydRPHz48Mx7VBltVSt2c6JZla85Qe3Zs2cHaSe1doJOfV4nqNS6TSTWThjv0HyubJVIPv30000eld8losmqVuzp3pGW5fKoNNNJXBNBrpMYq6DOvVt9NifDdPf0zjvvfOi13PX0fVRlMlAndtT37/Io7t0mJHFksRnrnhKJc3qtsepN24QTHbr71nyuH2ncdMJeve9169Y1eVRYWdWOJS5Ga791/UiFwanoWqXhLo5rTHJxRGO968cubusxJ7/UsdX1f40jaYxIxPr6bK7+NW6450/adq/oP+lHSZ9w52m9JWNEIjWvauvSvX/FjeNadipaV9mpk5+qINZdX+vE1bXrNzq2u/FfY4Qba/W+XV27+KNib/du9Z04Qe+ePXsGaZXjVnmxrgrS3QYRGpOfeeaZJk8yj3QxQZ/Fyci1LCeR1/jrfg84ibHOv915yUYv+t5cjHKb+GibcO0/2YwkiRE6JvaO9UnfTuKIw40RyWYM2o9cHenY7qTarv6TGKW4OtK44WJEshmTi2OnT58epLVfV7USbf1dWeX7v/4mdqJt7Vtuo4EdO3Z86P1U+b6lden6qL5Lt2GO9nW3qYLrt8lvNJ1HuTaqmzq4cpLNgBz6/C5GajnJpj4O10aTzbhUkO/edQL/lAIAAAAAAAAAgMnhoxQAAAAAAAAAAEwOH6UAAAAAAAAAAGByYqdU4gtx6HpRV46u6XTrXhcWFppjumbRuXj0mFsvqWs/XR63hjTxpagvw63X1TXE7jkcGzduHKR1TWtV6zBx65wTX8XWrVubY7qG1D2/viNXt+p5cO3KrTPWNcvuvtVX4ZxWiRvLvRNtt4lnxa1z1mc7evRokyfxA7j617aduLHS9q/11OuLSkhcMKnnpId5Oq16nm2eTi3XjvXdujwutugx96z6LEkbdeW4e9Jjzteg8ce5KNRh4GKEczrpfbo60hjlXATJtZxTRR0u7jyNty7+aqxL3IRVbf0nng33/hOSOUqvd0qP9cY692w6jjkXh5K4Oasyp43mSVyh7jkSp6ArW9tW4styeZxnbvv27YO0c6HonMw9R9Imna9U44YrW71zb7/9dpNn586dg7Q6pqqqnnjiiebYvn37Bunr1683efSY6//qa3ExynnetN+4uKF1696jxjb3G8H5+rQsN49M3q16xzRmV3lfjT5vEjd7x199R73Mcx7l0L6tvyuqqp566qlB2sVIfbcuHt66das5pu/NtRF1ASUxyl3fjX/qhk3cxEnZLta4+K9OZecr0us7714S61z71/etv2ur2v7v2rrWm+ujLkYl420yj1Vfk/ut7+Zf+i5dbNMY7dqRjiPpHFnjXxIPXazTsnu9c/xTCgAAAAAAAAAAJoePUgAAAAAAAAAAMDl8lAIAAAAAAAAAgMnhoxQAAAAAAAAAAExOLDp30jIn21IS0bnmcaLZRNDt6JEIO9GjO9Zz/UR0qOLdqqodO3Y0x1RspsLSqlas7aRuen2VOla1Mr6qVsjp6lpF7070rfJRJ/F071/ld04QqHXpRG8q7dR6rfLyPxXUOfmn1q17/yqNc30t2VTAnZfIZ7UdO0FdIvZLBLmOpI/2lqPHxpJ4pufM6/op+k6S66fxrwf3jlTi6kSnGrec1Nsd0/av8aiqjRFOhq791pXjJJYqjXQxQvuRy6MxycXRpE7ce9TY6iSiPeO4y+ckskmMSkiuP0+SvuXaiG4ionLuquw53LvVtuXuUedbLo+2fzdGuvifiOb1Ht1Yr4JeJ5p3G71s27ZtkFbxf1UrpHVt1Mm3lePHjzfHdN7gBMU6b7l9+/bMPKdPn27yPPfcc80xfX5X//r8Sd9280gXN1V+7J5Ny3L1rxJzJ2xO4qaLNZcvXx6knWhY69+1dSdRTjaR0Tyubesxl0fHTSe1d0w5/icxwj2b1q2bI2g9urm2+42kccONrXfu3JlZjrZt95vJxX9to+63hm6i4CTe2v/cOO7qRO/bPb/2v0Si7vqo6//6LKdOnZp5fbfxlsYR1x9d29L27/Jo23LvP5kjus0YdLxzonE9z11fx3EXx5PNaJzEXOvExXpt24jOAQAAAAAAAADgvoGPUgAAAAAAAAAAMDl8lAIAAAAAAAAAgMmJZQ5uDaOuxUycMsk6R7d+OXFaJWuhna9A79s9R+JCcevs9fqu7KQc5wvRNcNuLayuc3XrVZN17259cLLOXM9za6HPnDkzSL/55ptNHueZ0nX+br22vm+3XlvbsVsLnDg9XP0nvipdL+zWHTvPgq5zd2uB9R25d+bOU5yvIXFRJX1rVrlVbf2nTpux8szT+5Sgz+v6qGt/GrcTp5qLET1xxJ3nrq/H1INS1ToknBtm7969zTGNPy6OPvbYY4O0cyqoC8a1dddHNCY5z4PGhMR7kPR1d33XjvXZXDlJv3Vjq7ZTV2+J00TbfzpGj0XS/3u9K1pHztegfcv1Ndf+tC25tq3zDfcedfxxbdS9E21/7h71PPdsvfWv7c31P60TN0arn8TFEffe1M/pnFLal50L6NKlSx9ablXVV7/61ebY/v37B+mdO3c2eRLvpj6be0cOjdvu+dW94+aaTzzxxCD96quvNnncHEmdVm7+qXNCF1u13bp3ncSf5HdEMra7/qfesxs3bsy8n6rMFzgWSWx33iH1taljqaqdtzvvlKs3dfE4F5G+ExdH9frud4Rz02ks2bhxY5NH+41r6zrXc3Xk4q/Wt6ujXbt2DdLuN6o+r/s95pxWiVNQY5LzTmvZve04Gcdd/1fcmJXMfx06Jrm2ldx34t118TcpJx0TZsE/pQAAAAAAAAAAYHL4KAUAAAAAAAAAAJPDRykAAAAAAAAAAJgcPkoBAAAAAAAAAMDkxKLzRL7q8qg00IlOlUSYXNWKvdz1VUjmRGsqrXOiOycRS8RqKiRz11ec6NqJvlV+5iSOKs1zz6byvU2bNjV5Emmbk8+poM+9R5WPOhmfk4/qO7l8+XKTZ+vWrYO0ExSqWO/WrVtNHvf8KnZzz6bt37Ujd0+Ke353TNG+5K6v/Sbpa45U7NdTzmKj9zTPe0wkgi6OuH6j7d8JElV062JEIjF096335GKbPsuOHTuaPCoadRLT3bt3N8fOnTs3SCdxxL1b3VTBySBd3NTxx0lsZ91PVVuPbqxzEuFE9qnP4sZfbROpjFqv79qo5nHl6PNOHSN6paka/9yGMQsLC4O0qyPtt040687TvuXav7ZRJ3rW53fxJ5E4u36rz+aeQ9ukm2s4sa9KfJ1EWa+fxDonGnaCXq1bF381JrgNG/SdaFyrqjp79mxz7PXXXx+kXb099dRTg3SPeLfKP5vKjl0bUSG3K0frUe+5ysdklZi75+8RjScbFrmy3HnJhjHJ76ZkbHHoeDOW6NzF6GQzDN3Ap6rqrbfeGqSTzTjcXCPZIELnQ1Xt+Oc2Y9E26t61ezbty9/5zneaPPosST26eZxro/p7x8nYtf0lv/V1AwNXTlU7ljiJuOZJ2noiTK/yz6L0bBiVbDxT1T6L63/6LC5PEreTbytu/J11P46kHAf/lAIAAAAAAAAAgMnhoxQAAAAAAAAAAEwOH6UAAAAAAAAAAGBy4kXIiS/Hoes13TpXXWfp1ou6dea6PtitBVZfj/qL3PWdL8Ct4dywYcPMe3THlJ41nVWtw0T9AVVVjzzyyCCtjpmqdr2ucyq5dbf6Lp1TRevbuSjUhaKOgSpfj7pm3a0X1/XJWh8Ot17WvROtJ7eGXtdVu/bXi64PTtZL9647TtZd95L4qrT/JWvaq9rnTVw8rh2pw8XFAxfbFLdePnFaaL9JvDNV7X0nngXnC9G+7Zw2CUlsc94PdTG4Npp4JhLvkStbn9+V49rf+fPnB2nnFJp1P+6Y89C596Zt0sUfbTfuHrVNJn2tqo2lrv9pHtf+9d2m3rueeJd4N1w7Tq7vvF8XLlwYpF396/t2/TjxNaljp6ptI+7Zkhjh6k3brWvbek+u/2l7S/w9VZnDU+cbzvui8c7Noxxaly7+J74wnaMeOHCgyeP6pD6Lc2olMVLbrWvHrv4Tp2zindP37eJfMkd33qnk2ZK47Z5fj7l2q/Xf64vRst3vgaSc5PrJe0zcmFVt3bp61LLcbzSdN6gHsirzdSXXd3M9Pc+1UVd2j3vHvUcdE9zvsfXr1zfHNLYkvjrnRlLcO0qcUm5s0TwuRu7cuXOQduOh69uJU1HfkYuj2v5cHHXx//r164N00m4Sp2bq+E2cdtpH3fNrm+j9zcg/pQAAAAAAAAAAYHL4KAUAAAAAAAAAAJPDRykAAAAAAAAAAJgcPkoBAAAAAAAAAMDkxKJzJ39W+ZsTfe7YsWOQ3rhxY5MnEZYnou09e/Y0eVT+5kSHKvpKBW0qjXXCOr2+ew6VhqXX12dx8jeVrzlBmd63k+E6+ZqTtinaJpx8MCnHiSZViOfq6Nq1a4O0tseqTMbrUCGea/9adiLodc/hBJHJfWrbdveo5bhyE7FlItF0OCHmLFKpcSKx1rrdvHlzk2fbtm2DtBPoOkGi5nOxTa/vJJrat931XRvRY65vaxtxonGtRydRdPek8kN3nkqkXfvTDQpcXSdiySNHjjR59HmdxFPbjYujbmzRNunerYqOE2GubqBQ5d/tJz/5yZllq+jZiUb1/bv6d3Fczzt58mSTR6XRLtZr3bp3lMjHdTyoqlpYWBik3UYfesxJZF1M0mOu/rX9uedXGbgrx703PebO0zbqYlSyYYJ7/4nEWecErh/pnMjVkYt/69atG6TdHFHjvXv/p0+fHqSvXLnS5ElE3+75tS27utV586OPPjozT1X7LO7dKm6un4juE0G0i+06biQbHTiSeYSLEXosqaMUHZMSQbEjkYjPunZVVo/J9RPctdz8qyePezbXbpLz9Jhr/xqT3O8YnRMkG3+46ycScVeOxrr9+/fPvMeqdv6hmwNUtfHObaqj/djdoxONa90mv/XdHF1/o7p25H4jaz533zpHcnMtfQ63YYYrW8cIN/5pHjdGJTJyN27qO3FzO71v941C68T91k7gn1IAAAAAAAAAADA5fJQCAAAAAAAAAIDJ4aMUAAAAAAAAAABMDh+lAAAAAAAAAABgcmLRuRPdqVjOCbpUmrZ3794mjwrxEolYVSuSU9FbVSsxVGGZwwkznTRN5V9OYqv36GTAWo67ViI/dWI1FdQ5iZnWv3sOFX1WVV26dGlm2So/daK5Xbt2zczjnl9lv050qHV76tSpJs/atWsHaSfDdII+FdQm783JD/W8XhmmQ8tKhJWJDN3h3n8i8dNj7vkT0barW83n3lEi+ldpn+sjro1q2U5iqfXtJJIqsU2kwlWtkNO9R72+i396vSSOVbUxysXfRBCpfdu1NScf1jq5ePFik0fvKZHxuhilMnZXVq/8VdvRs88+2+Rx49/169cHaSex1zbpJJZ6fVdHrk9qjHZla79R8XhVW/+uHbln0/ftROfaltxzaJt010/itqs3baOJaNTF8d570v7u+r+KrVPRvD5b0v4TGbCLdU4QrnXp2sjZs2cHaRfbtf0lG8ZUtc/m3puW7WKrbtDw2muvNXmcxF2F6Mn8w40t+r7dXMvdd/L+9Zhrs8kcIWl/8xSNJ8d6hOG9jDmP7CGdR+oxNx7q/DtpRy5PUifJpj4uRiZjpOs3yT3puOmur/NGFw+dIHz79u2DtNswQTf6cZsBaNxwbd31US0r2UTBzRG1vt1vDZ0PVbX1lAjaXfzXezp37lyTx21Qk8w/NY/+9q5q5zbu+ZMNetzvGG2jrhwVzf/iL/5ik2fnzp3NMYV/SgEAAAAAAAAAwOTwUQoAAAAAAAAAACaHj1IAAAAAAAAAADA5sVMq8V44F4KuhXVrERW3Xtatc9S1/84XoWtY3VpUvUe37tQ9vzo8nK9Ay7p161aTR+vErenX9ZpV7dpTV0da1uXLl5s8ek/ODZCsl3e+Ar0nV7cvvfTSIO2eX9c9V1U99thjM887fvz4IO28G/r8bt1z4ktw71bbjasjbTfO1+FI+mTigtL2755D3URV7btN+pZbr6114uo/Wa/u0LXQbv2+1qPz3mi7cXXvztMY5ZwC+vyujvSduPfh7kmf18WIxOmiz+9i/YULF5pjuvY9qX/3bNonnHfLtRvN587T512/fn2TRz0Hrh6d00r9ZOqvq2qdBlu3bm3ybNq0qTmmuPEvcVppTFYPZJWPW4rr/wcPHhyk3RipTgP1kFW13h+Xx7VJ7Tcu/mu9uXrU6yXvoypz4WlMcP1Yj7n32IvWWzKPc7g2kow/WkeJ08XVo7tH7Vsu/iZORzf+zyqnqn1PzpeiZbv5r+Zx1zp8+HBzTB0mTzzxRJNH410y13FjhKvbxPPj3CeKPm/iJnLXc/eteRJ/btKuF5tef1UyRifez2TMSNH6d21N25F7165O9P0nTtne38PuPO1v7tl27949SDvvqfrjPvvZzzZ53Niu13N51JfpYoTO0V0fcb8tTpw4MUgnTsskjrrfUe6d6JzQPZve96FDh5o8Z86cGaSdU8r9Rk3mKFqWK1vncW6O5NzIiqsj/R3j4rh6VrU9VlX9/M///Mzr808pAAAAAAAAAACYHD5KAQAAAAAAAADA5PBRCgAAAAAAAAAAJoePUgAAAAAAAAAAMDmx6NzJv1R25yReKt86f/58k0fPc8JUJ9ZSseypU6eaPCrb6xE/V3n5l8pXE4meE91pHblrqVS9qpV4Ohm6is2cIE/rxMnQXP1rm3CCQH0WJ/HTZ3vmmWeaPE4QrO/fCZK1bTlBrYptU9HpihUrBulE9O1E//ocTsbs5MtatpPYa9lOkOfEeooTFGs9JfLdROKbSDQdyfUT0a3KuV0eJ1F08U/7hAoDU/T5nRzW1Zu2JddHFVe2ir2TDQOq2ljiYque52K0xrpt27Y1eVTG6cpyz6/vMpHxb968ucnjBOUqDXUxWuOIu8dkHNM6qsoE1YoTfat82fU1FZZWteO9ux+VobvNMLRO3D268V+Pqfi5qo3bLtZon3DXdyQS5R5BcLKpgSsriZHJ9RMZsjvmytZjLo/2URdr3dxGj23ZsqXJo3MLV7bOG9x7dO3WzeVm4Z5fY5Lr/06Qrvf01ltvNXn0eV09avx3Y0QytiYy/ERinvQjd71e+XbSj3v7TYJez/VjbSOp6HzMTRN60LaUzP/cPScbNri2pXMU1441jxujVfTs5iOub+3YsWOQ3rlzZ5NHY5SbR+hvlEQGXtWOyU7irddLNsNJNtWqat93IlF3cVxjtKtrN2/Usdz9/lpYWBik3aYSKjo/duxYk8c9v86Rkt9orm9r/Hft2LV/HVtd29bfLW6s1zaR/NZw8E8pAAAAAAAAAACYHD5KAQAAAAAAAADA5PBRCgAAAAAAAAAAJid2SiVrmN2aal0f6ZwOuvbVXcutj9R17m4tsjtP0TW1qVNJ11Um13JrMd36fOXJJ59sjunaV3d99ZU4tN50bXSVX4uqz+LWMKsvStdPV7UuFuddOnLkSHNMcZ4f9Uy59cp6386f5NYC63u7cOFCk0fblntHyZrmt99+uzmmvhTna9M+4p5D87h+7Nqo9onETeDaUeLLSVxw7vpatqt/bf+ujvQ9pveoZTvvR0Liq3DtX70Kbi263qNzMWgbSV1FSUzUe3LX1+u5GOWOaX933qX9+/cP0rt27WrybNy4cZB2Y43zLGi/cc+mZTlfkXrOrl692uRxTjs33ig6RrgYre3PeQ+cr0a9AqdPn27yXLx4cZB2z6953LWc0ydx8SRuTD3mxrpeenw1qdMpKbvHDejq0Y2tms/FKG1/rm61HBdXnC/kwIEDg/SePXuaPOp+cXWkcxSXx43/Gm9cHWl9u7FW56QujrixRV0gznuncdPNv/R5k3dd1fY/17a0TaRte9Y9unvqdUpp2b2+JvfbQuebrv51TuLy9PgDp8b12+T3T885bh7t2q32GzdH0PPUFVnV/tZxTin3e0z7pPPeqh/JjXXqOHZzBNdGdGx1v3803rhytE+4+Zh7/iS2qNPK5Unmes4zpS7M48ePN3nUIeV+j7388suDtPvNmvhqXRzXeku+x7hyer9RJL8RlTRGKvxTCgAAAAAAAAAAJoePUgAAAAAAAAAAMDl8lAIAAAAAAAAAgMnhoxQAAAAAAAAAAExOLDpPBMFObKViPxVPV2WicXf9RKKYSDsTnHzRHVNU0KbpqlZG6e7ZyXdV7OnqSGV/a9eubfJs2bJlkN6+fXuTx923ygbd+1fZnxPdqUTNSQzdeYkgUqVtrm2ptNBJRJ1YUNuyiser2jZ65cqVJo/et7tHd0w3DXD1ps+fSFSdMFmFxVWZ/FrzaLqqrW8njNbn6BWNOkGfluX6n96jex8JibA9iStpXNPrubKTshIZvSN5FhVUunP0HWnMrPIx4tFHHx2kVVhe1Yq9VVha1bZbJxF1Yk+Vlrr2/81vfnOQvnz5cpMneUdO0K1x25Wj5+l44M7bvXt3k+fo0aPNMRWCuhh55syZQfrYsWNNHpWROomna5MqzXbnuXjfk8eRzJFmnVPV1n8ifnbXS/qti/Vab66vuX6j/dTJZ/V669evb/LovMX142Sjh+TZ3BihY1uy8Y0ry4l2td7c9TVGOtGva6Nalos/urGAezZ9jy7WufvWOamrI22TLo/Wv3uPjqS/ab0lvyPcHMlJjFV+f+PGjSaPHnPzKDcnUrTedOxLSSTGvXOUZBxzv2P02Vwc03n8zp07mzwu/mhbdnMLjT9uwwB9NtfX3PtfWFgYpF3b0rm+29RINxFx7dG9tyRG6O8G93tQ5zquj7q2pflcbNN+7H7HaPx3G2a4GKn1rVLzqlZa/p3vfKfJ87WvfW2QTuaxVdn8V/u/y6PjWDpn0XeSbHTlnkP7rRPmR/fTdRYAAAAAAAAAAMBHgI9SAAAAAAAAAAAwOXyUAgAAAAAAAACAyeGjFAAAAAAAAAAATE4sOu8VhqvELBEPJqK9qlZ25wR5KvtK5GNOKuikbSrxdhJLzeNktCojd6LHJ598sjmmIr9E4rZv374mjz7bW2+91eRxdasiRSco1bpUqZ+7fiKsrWqfzYnO9X070aDWvyvHyYcvXrw4SKsw1KHnVLXP4dpfIlp371+f10kMtb25a926das5pkLORNCZyv9m5XEyShc39Nlc3eo9pRLvnuv3isa1/yWiUXf9RFCY3I+rI1e23qerI23/7t0eOHBgkHYSV3fsJ3/yJwfpRDTrnk1FpypHr/L95j//8z8HadePEolxjwy0qu2Trt1obHUxQs9zMtZE4uo2evjGN74xs2wX/5VkMxTX//W8JB65azm0/7n2n8x3kj7p5ig6tjkZuApS3TxGBcFuwxQV3Va1EmEnQ9d7dPMIvW/XRs6dO9cc0/bvYosKWd271ed1cwTXRjWWuPan47jWR5Xv77OuVdX2ZbdBhz6/G8cV10Zcv9F7SsYNF390/uXakcqgq1ohv5tb63nu3WpsP3v2bJPHtT+tWzdHS8boZB6j9bZnz54mTzL/cvEo2bBB8yTC5hQVLTvRtfY/3Qiqqv09VtXGFjdG69ze9SPd/MTdY7LRUPL7w/2O0nbsNhVz8mkdW5J360Tn+tvSjTVONK/jj4sResyNdTr+uHp0se3VV18dpHXjlaqqV155ZZB+/vnnmzzab9ymKg49L/mNkmwYkcQRdz1Xt67dzrp+L/xTCgAAAAAAAAAAJoePUgAAAAAAAAAAMDl8lAIAAAAAAAAAgMmJnVJufbCuIXTrFZO1yAluTaOW5a6v6/Odm0HXx27fvr3J49bH6nluvfKWLVsGaedL0Hp0687dGmZdH+s8D7o+Wtc9V7WeK7fu1z2bcujQoeaYroVO1pS7NuKcCrqG3q3h1WdLvEvuWm59tq4zd04DvV7iwjh16lSTx52n9+TWS2u/cfXf64tLXATq50icKm5tsuZx9+zaTY+vypHEMXdPiWdBy+p1Mbi67fFFODSPu5+kbBej1QXlfE1bt24dpJ0vwzlt1GGk8biq6vDhw4O0ekiq2v7nYp3r/xpLXNvWNfy9jiF3nuZz4+iuXbsGaeer0H7sYpRzMWg+dWxVtWOU81VorHf1mMw/3BiR9FF9fncth9Z/EiOS8c95h9wYrU4nN//QMdKVo9dL3JhVmWdDXTBJHHHlOBeGzpvcPErfpevHen3nZnFzBO1vbv7h7lvR5924cWOTxzmtdE7o4p/2Jdf+9fou/rtjWt/u+bX/v/nmm00eje2uzpz389KlS4O0e0ca7/ScqnYccf5A58LSY0m9udii5bj2p3k+97nPNXkSz4xzqiVuPH2OdI6kZbn2p3ncPep7Uw9QlY9tiXdQ/UTOn6jz78TfU5X9Ruhxo7r6d79jkzFKcc9/5MiRQdp533Q8qmrHEnd97bdPP/10k0fHSPd76Gtf+1pzTB3Kbo6iDqnEn5T+Rkmccon3NpmTJL+/XIzWe3LPlvSjBP4pBQAAAAAAAAAAk8NHKQAAAAAAAAAAmBw+SgEAAAAAAAAAwOTwUQoAAAAAAAAAACYnFp07eiS+Tsalx5zEy0kcVVrnBNUqUXOiTxWyuWs5QZwKwpxET4+5slWG6WScTlCrsjH3/HqeE9Qmot033nijOab3uWzZsiaPPr8TpKlYOBE9VrXvxAnaVNDpJLoq2nTCTCcfVPmhyjCrqk6fPj1IO4mnChqTPlKVCaq1/zmJnva3VFCZSLT1mCs7ydMrLE8k4gm9GzT0lJ0Iyx3u2RKJZSIaVbGou59Efr5///4mj4rOd+7c2eTZu3fvIO1ijRMUKy7+6rO99NJLTR6NI0606/qo9i0naNUY7cY/FYS6WOfajdaJE4SqtNcJQpUTJ040x06ePNkcU2moE/Rqnbjra6x3bS0RhPb2/160v7nra7txebTdbt68ucnjJNbabtz4p3MkJ6PV9u7q37V/fX53no5/x48fb/Ikomk3R9J+6zYxUEG7iyMq8XdzNNcntWw3j9S6dbFF+4jOWT6obO0TLv7pxhJuwxytW/euXb/V9+Te0be//e1B2sWRJ598cpB2G/Y4+bK2m4sXLzZ5tCxXtypaTkTjVe0c0T2/zi31nKq2bl05iTB5LNw8Iol1iSA9wZWt79+9x94xQuvb1X/vZjj63twmDmNtWONIfiPoMRdrtL71t0+Vn9tp/3Nj26c+9alB2m1qo/3G/WbVWFNV9Y1vfGOQVvG5Y6zfI2PSW3bP78iknN72yD+lAAAAAAAAAABgcvgoBQAAAAAAAAAAk8NHKQAAAAAAAAAAmJzYKeXWFLp15bPOS7xTznvgfAnqK3KeEfVz7Nu3r8mzZs2aQdqt6XbrfHUtuFsvrJ4B5x1Q0nXXus7dranXte/J9d16aYe+E+dr0OupY8HlcW4sVyda/67dPPHEE4P0wsLCzOs7N5TzJeiaZfWnVFVdu3ZtkE68O64dOZJ15krvOl/nuUnWovf4osbKk56X0LvuWustcTE4Eu+TO6Z9yblQkrXgeo+uPThf31NPPTVIb9++vcmzZ8+eQVr9Ue76buzROF7V+gqcr8bFBEXr3/VjN0Yo7l3rO3JxTN0szungXDjqh3HeQ3X6OO+VuvBcPbr4p2W7tqX1lniXxvQ1jOVUmGfZ2kbcfGjDhg3NMe2nbozQmODGP30OF0dcTNB+4s7TeYubf+n7d3MU5/TRfO75tS+5vpU49Vz/Vz+X8zX1+DrcXNf126TetC87X5O2LXd9F9t0/unixttvv/2h51S1scV5z3SuVdXOkTVd1bpw3Dxa469zjLq61fae+kKVnnnbmP6axJfUU4475upD+61r64obo90xLSvxpzrvm5LMo3qvnzil0jnirGt90D3Nwvnb3BxF5yS7d+9u8mzcuHGQdk5BnaP8y7/8S5Pn61//+szzXPtL5ii9zMszlZab9O2ee+xpM1X8UwoAAAAAAAAAABYBPkoBAAAAAAAAAMDk8FEKAAAAAAAAAAAmh49SAAAAAAAAAAAwOR9JdJ6QiH61bCdjVRluVdWSJUs+NF3VSsuWLl068x4T8WBVK2R0Ej2VLzpBoh5zwk53TO/Tye8S0alK+9w7cuep2NyJjlVs7upW35t71kSQ/+ijjzZ5zp49O0g7iemFCxcGaSf6PHnyZHPsxRdfHKRV6lvV1q2rR63vRFiestgS8XlefyzGkha6tq39zz1Hcn1tI4lUvaoVrbq2pRJHJyNWsayTkbsYraLzHTt2NHlWrlw58/r6vE6Y+dZbbzXHNP4mEuVE9OmkxirjdGU7QbCKzZMY6cYRV/ZnPvOZQfry5ctNHo23Lv6+/vrrg/TLL7/c5Dl8+PDMe3JjpOIktroZhav/qeNGQiKfTdC5hpPzu3Fb68nVm75vt6mH9kn3Hl380ffmJNYqiHabseixdI6kdeLalkrkXZvR89w80m3iovXm6kiPuTmKHktifVX7/Il81onuNW470bATjWucOnHiRJNH27KL0XrMScXdeSotd6JzvUdXj9r+XD329u0kRiUbRk3JmBJtPebato6JbozU6yd9zZH81kjmCC5GJr8t3RwtqSO973RTnUR0nWzGpOW4DQMS0burt3Pnzg3SZ86cafKoxPzLX/7yzHLcPSXP78aoZK7fOx8Z63dU0kd7Y8tYcx3+KQUAAAAAAAAAAJPDRykAAAAAAAAAAJgcPkoBAAAAAAAAAMDkxE6pZA3xWOsc3brTXs+AluXWout60dRppH4E50tI0LLds7q18Ldu3Rqk3X07h4Si65zdeuVNmzY1x9Sh4DwviYtF20T6/j/5yU8O0m69sD7LxYsXmzznz58fpF0bOXr0aHNMPVOubet9u3ak3im3prp7fa60bfdue30FUzqlEpIYNc/10u6YtuXk+s4pkHjGXB71pbgYpQ6NNWvWNHl++Id/eJDev39/k8e5ANWX5Hwd6gJx7V8dRs5N4lw42kedL077qPM1ad2qT6+q9W5VVT3++OOD9IEDB5o8Gm/UsVXVvkfnT/z0pz/dHNOY7Fww6sdxLobXXnttkH7hhReaPC626Lt1vpykj2j993rvEnpdDA59NucUSTw/2iZPnz7d5HFOH603FyO0T7o+qvftxmNHz/OPOf4pbmzXmJjE2sRNVdW2f5dH51HuHt31kjyJ01XfiYvjet/uHnUeVVX19ttvD9IubmtMdnM09X66WO/myNqWkr6W9P+0PWpb6nUxLTZj3WNSTjJHTdpxWteJZ6pnjpo8R1XbRlKn8SzSsa9n/u/6v8YI947c/EvnHzpnrKp64403BulDhw41ef7zP/9zkHYeYHdP+p7cb9Tkd1wv95r3cqz7wSkFAAAAAAAAAAD3DXyUAgAAAAAAAACAyeGjFAAAAAAAAAAATA4fpQAAAAAAAAAAYHJi0bkThM1LYn758uUmj5M4qpAxEXQ5QWciQ3RiNy3LiUaV5PmdxDGVr8/C1aMTiypOIpkIgrdt2zZI79q1q8mzsLAwSDth8E/+5E82x65cuTJIJ8+h16pq6/b1119v8hw+fHhm2U6QmkgL9b5TQWKSJxEEJ6LZRFA/T4n5YssAE5J77BWd6ztKhK1VbdxSqW5VG0e3b9/e5NFNBfbu3dvkcc+mgtrdu3c3eVRa6SSWKgzWvl/VSnWr2ljq2rbGRBVvVrXPpptMVHmJuMZE9241Jrp73LFjxyC9Z8+eJo+L0VpP7v2/+OKLg7SLdZrHjYe9EtlELJ0w1kYradk9uPFX+7K7lo5RblORGzduzLx+shlDL8l7HGse6Uje/1ibYbg+6sZ6nSMtW7asybN27dpB2vVRLdtdy9W/Xt/l0eu7jS60vbl7dPPWS5cuDdIuRuomCm7DmlSs30NPG3Ek4/ZiM5Zo3T2XluPqI7m+61v6jlzZumGQ6yNjxb/ejb96Je699zTrWul5ek9uHNMNMtxmMBprqto6cb/RdDMKt9HKkSNHBulEal6VCfKVqX+P9PzWGlPGPuVmDPxTCgAAAAAAAAAAJoePUgAAAAAAAAAAMDl8lAIAAAAAAAAAgMnhoxQAAAAAAAAAAExOLDp3oqtE9pWInhUnkXWiQxUiJhJnlbG5sp0gLZFoJ2K/RDSXSsX0ek4+p2Ulwkgng3OCSpXfnj9/vsnzmc98ZpB2wuwtW7YM0k8++WSTx5WtEuGNGzc2eV5++eVB2smQz549+6HnVPk2qfXk2rq+b5UxVrVtMpHBuuunYslZjCUerhpPht6TJz1vLIlfInVOBJmpoFN5+OGHm2Mqrd26dWuTR/vfvn37mjwqqHT36Pr2Qw89NEi7vqV9W+XoVVUnT54cpN1mGEkdLVmypDmmz+JipIq9XV27+Kv36SS+jz766CCdSIRdnqtXrzbHVJDt8vzHf/zHIK1xvarq4sWLg7QTlroxQtufq9ukj/bMIz6orJ7r947RySYS+mwujri2pfTed48gNRW9JmX11m1yrbFieyIjdnWi7V37UVXVmTNnBmm30YLOG9JNVbQt6aYWVVUbNmwYpJ2wPNkwwvV/3fznrbfeavJonSSi6/T3SE/762WxpeYfl81gEom6a+t6nnuv7jyNrS7+JhvNJHFsLBn5lOLpqiz+6Zxo8+bNTR43/9JjujlCVdVXvvKVQfrNN99s8iS/0RPRuXs2jb+L3dcT5tlG5imD559SAAAAAAAAAAAwOXyUAgAAAAAAAACAyeGjFAAAAAAAAAAATE7slHLrA3Vdu1tnqcfcWnj1jri1oW6du+ZzZSd5dH2kew63FrVnDbHLo/eUuoH0PtV74ki8O8m1qtq12CtXrmzyqGfGOUXUaeC8K87FtGrVqkH629/+dpPn8OHDg7Tz1Xz9618fpJ0bIVmL7NDnd04zrX/3/t319dhYa9jdtXp9TQm9vqiePGOep7i4pX3Evdue9emur23atKk5tmvXrkFa/UVVrYtt/fr1TZ7bt28P0gsLC00e19bUl3Lz5s0mj3reTp061eTRfpM41qra+u/1legY5fxZWkdVrR/G1a1e7/HHH595/SNHjjR5NI66stUfVVV14sSJQfr48eNNnmXLlg3SN27caPKsWLGiOXb37t1B2tVbTxzt9SWM5ZTrdUq4cUzbZOKUS+cISWzref4x/U3JPFKZpxtwTKeVvks3R9O27WK71pGbD+t8qKr1BboYofeU+Ho0ZlT5uHHs2LFBWseDqtZ718vUnp15Mc95zJTeNUfitHX+PG3/rh9pHHVxJHGxjVX/aYxe7Pjbc73k96Dzl+p8tKqNSa+88kqTR4+pT7iqdVq5uOLajd537zi62PT4I3vLTsApBQAAAAAAAAAA9w18lAIAAAAAAAAAgMnhoxQAAAAAAAAAAEwOH6UAAAAAAAAAAGByPpLoPJFfqXw2kXimElsVySVir0QQlz5r73lK8hy9YtVEvqe4d+Tkm/v27Rukt23b1uRRifKSJUuaPCqtczJgJwh/6aWXBmkVJldVHT16dJB+4YUXmjwq43UkMl6HivVc/fcKwxP57axz5k3S/pLn1fbf20eSPtrTZ6syQWciw3WsXr16kN65c2eTR6W27pirI73+xYsXmzwnT54cpJ2w3PXRq1evDtK68UBV2/+cDDWR8Tv02ZINC5J360Sbrm098cQTg7ST0T/yyCODtNto4cCBA4P0O++80+TRDRuqqq5cuTJIv/HGG02eF198cZB2wnKNY05Y7t5bshmD1nfSR9P3nzDWhg2ORBDbM0fpJdmwxpHE1t5NHHrmNmOOYz31nz6riu03b97c5Fm3bt3Me9Q8Oh5U+XmTbrTgBOl63248UrG524xCxwh3nhs3Pi6C8l7mtdGLkzonou/euW5yjy5uJ3M7fRa3YUlyP70bPSljbrSh78Q9W88cNR1HkjEquZ7Obdwcdc2aNc0xbRPuN9qlS5cGadeOdf6ZjGtV2e/4RIafzPV7f1v0bGKQzmOSbzQJep77PZTAP6UAAAAAAAAAAGBy+CgFAAAAAAAAAACTw0cpAAAAAAAAAACYnL5Ffx9A4oLo9S7dD7i1uIlTQ9dipvXRs4Y1WS+6Y8eO5pjz1SxfvnxmHl1D7LwH6p1xbhLNU1X1+uuvD9KHDh1q8hw7dmyQduvs7zV618KP6UJJrv9/mXS9uLblpG+rh62qavv27YO062vqJqqqWrZs2YfeT1XV+fPnB+lr1641eS5fvjxIO6eRrvt35zkXUbJeX+Nor/fP+Rr0nlwedbG4az399NPNMX1vLrauWrVqkHZOKXVB3b59u8lz5MiR5tjBgwcHaef06vHe3a/0zlGU1FehuLal3iE3j0i8S70uiB43p2MsX0vCPNtj0v5dHueL27BhwyDtPCv79+8fpNeuXdvk0bjhHJ9ubqPuO9dG1CH45ptvNnnUF3Xu3Lkmz9mzZ5tjOpb0tlHl4/Q7omce93GJx/cL82xb90O71X7r3FAax3Tu6cqpauckzg2ccK/9/qGP9sE/pQAAAAAAAAAAYHL4KAUAAAAAAAAAAJPDRykAAAAAAAAAAJgcPkoBAAAAAAAAAMDkjCo6dyQSv14ZpuZLzpunfMxdP5GIOvmp4u47kZ8q27Zta46pjNNJPFevXt0c27dv3yDt5JvvvvvuIO1Ey1euXBmkVU5e5SXKKuR0gjytox/6obbJ99RjSo+0sld03nv9hLHKSSS68xQ/9j5Hck8qLK5qxY5ORqui6927dzd5VJjtrvXee+81x44fPz5IO9G4SrxVfFvVytBdf3Q8/PDDg7TGg6r2najU3OUZE42/Lh5o3Hj22WebPE4+nwjqVWzuYtSrr746SJ8+fbrJc+bMmebYiRMnBum7d+82eZYsWTJIu/ifyOinFHuOGSOmFA27uu3ZDMG10XnGtt6yx4rtWm/JpjIOJ9rV81z/0zjmNqNw8l/dfGLv3r1NHhWkuw0rdP7lNjpQqXlV27acjPyVV14ZpHXMqGrF5m6jCze365lbJW3tfpBDp/T0v2QelfbZxRYyf5ze5ccV7cduwyqNWzqvqPLzv29961uDtJvbfJyZ12+0ec6RkrK7x/quswAAAAAAAAAAAD4CfJQCAAAAAAAAAIDJ4aMUAAAAAAAAAABMTuyUStYw34v0rMXuxfkierxXrhx3j86PoOzYsWOQ3r9/f5NH1wc7N426UapaP4rzzOjzHj16tMmjngPnS3jttdeaY1evXh2kly5d2uRRh0ri75oniYtlnv1qLDdIVd+64qmfred6vWuhnVOjB+fh0HasHrYq7xRRF4pzWqkvxHlHtE6c08qRuIjU6dIb65xTxsXSWXlcjHjuuecG6cceeyy6vsbbhx56qMmjnq+XX365yaNOqcOHDzd5bt261RzTunTX1+d3dX0/jPVjuZGm9k4m3GtzlJRkbBtrHHHtVv1Qrv2rC8o5nVasWDFIu7nG8uXLm2OPPvrozPMU52tR75wba27cuNEce+ONNwZpF1s03l++fLnJoy6Y1HGavH897351DI01t5pn/EnGQ8e9Fv/dc8zTDdtDGuuS+LvYfULnkS5GakxatmxZk0d/s1W1buDEzQzjsdhtS+FNAwAAAAAAAADA5PBRCgAAAAAAAAAAJoePUgAAAAAAAAAAMDl8lAIAAAAAAAAAgMmJRedjCUJ78/RKTKcULffK9xLRYSL6dYLMZ555ZpBWYWVVKz/es2dPk8dJfPW8jRs3NnlefPHFQfrIkSNNnosXLw7STrTsBKUqMVUZtGPqNpK82ylFl2OSbCIwRrm9eVy+eUr9nCA7ETRqu9X+UNX2NXctJzG/du3aIO02EdCY4O7Z9T/FyXc1/iWbOLiYqcd6378rWzd2ePrpp5s8+/btG6RXrlzZ5Nm6dWtzTOOmSs2r2pj4ta99rclz4cKFQdpJjV3d6vVc+09k9PdrjLrXcO1P31vv/MfRI5qeJ73PpnWU1GNVG7c2bdrU5Nm8efMg7eYx69atm3mP27Zta46tXr16kHYbvahE2M1jjh07Nki7+aCbW+n86/Tp002e7373uzPL7pWRJxLnscboKeXXvfHv4yxsTubRix1rEsaKtVMLpKe83pIlS5pjySYOr7zySnNM5zaOZB652Mzzd+SU3zEcPfO/7jjedRYAAAAAAAAAAMBHgI9SAAAAAAAAAAAwOXyUAgAAAAAAAACAyeGjFAAAAAAAAAAATE4sOnf0yLbGksil1x9LyNUrWlecMFzLTmWAKvHcuXNnk+fWrVuDtBN9btiw4UPLrWplnFWtIPOll15q8qho00ntVDTsSPKo+LwqE8T3SuN62t+Y7Xix5XdTihV763Fe9+iu5fqN5nMycD3mZLTnz58fpN1zubih+ZwgUvuNk6irDP3BBx9s8jiJt56X3Hciw01Fl9r/XTzQ+JcIi108dOh9njx5ssnz1a9+dZA+c+ZMk0cF9S7Wufan79LVrb5LlyeJNYstP5/nJipjMbX8Vlns95Y8v5sjJTHCiXa3b98+SKvUvKrt72vXrm3yrFq1auY9btmypTmm8WbNmjVNHo3tLkZcvnx5kHYbVqgMvarqypUrg/SdO3eaPD19e57tuLePTn1P9xrJGHk/PMc8uRfb1mKPCQk6j3DzKN1o6/r1600eJzrX35H3Q33Msx+N+Y1krLKnhH9KAQAAAAAAAADA5PBRCgAAAAAAAAAAJoePUgAAAAAAAAAAMDmxU6p3DWXPGsZ03e+U66OTe+r1TvWUU9W6QFasWNHkUT9C4otSD1VV1cLCQnNM3Sff/va3mzzqPnBOHXXRpE4tzedcOLqu3pWd+IoSEhdDb570emOcs9jrjnvdMPOMB0nZbp291qVzkWgbde1Y223qVEruW/ufixHvv//+IO36sfMcLVmyZJB2brikvenzpmNE4ktRz4uLo/r8jz32WJPH1Yk69I4cOdLkOXjwYHNMSbyD7vraltw7Ulw7du3240JPTOyNkfP0VyZzpLHi5phjRM/1XTt2Lij1xT3yyCNNHnVRuXJWrlw5SKsrr8q7AF9//fVB+ty5c00e9T4lTr+7d+82edTNUtXGhN7xf7E9J8k8bkrvT+8credZk/tJrv1Bx9K5xFQs9vxzntyLz9bj+btx40aTR4+5WOdceFq2m3/oHNXFyITFdkH9X3e6Jdxb0QgAAAAAAAAAAP5PwEcpAAAAAAAAAACYHD5KAQAAAAAAAADA5PBRCgAAAAAAAAAAJucjic6nlLaNJQhLZKBjPlciqNU8TjzojiX3rdJel0dlnE6i6eTnx44dG6SvX7/e5ElQGaeTmCZiu+Q8lcOnZTt6hNxjis4T5ln2lNxr9+3ux7U/FWT3xp8kRjhBpJbthNXa/1yM0uslwuyqtm+5+56nIFKv566/Y8eOmXlUhuxineapaiXm3/zmN5s8SfxRYXw6HieC8uQdKWP2x16J8LyuP/W1eiTq8xSNz7M/Ju02iWOur61bt645pqJzl0c3enEy3suXLw/SuoFBVdXhw4ebY7oZjIutOrdabIn+mIx1vXTzm3uNZNxWxuxbPaRzi1nci1Jvx2Lf52JfP0HniE5i/vLLLw/S165da/K4tqVzZNeOe3+j3Q/cj4L0eW6YxT+lAAAAAAAAAABgcvgoBQAAAAAAAAAAk8NHKQAAAAAAAAAAmJzYKeXWdPf4csZkXi6KXu+Jq6MHHnhgkE58Ca6cZE298xzcvHlzkL5y5UqTR9f+vvvuu9H1k3vSukzO6V0/7M7TunX1r36cxPvlSFxgU/uienwlybXGJHmOXhdDjy9lzP6vTp+kbTkPUNKO3Xl6PfccPW00KceVpf4Ax0MPPdQcS85btmxZc0x9LVu2bGnyqFNGY7a7J+fYe/XVV5tj3/nOdwZpF6P1+kkbSR0rY/WtJE/P/XzQsR5c/E9iuz5bMkb0Mk/vz1h1u9j+UIde37khV65c2Rxbs2bNIO3e/6lTpwZp54u7ePHih6arqm7cuNEcG8uFMk/vKfzvSdyQ6Xk9JNdyblg3tmq8c7Fe23HSrlM3rl4/Gdt65+jJeb0xOimn97xkHtfrJkpii45/Lta98MIL/+v7qcrmFskceay+1Vu3Y82RHEkbSb4juHvUd+vm2j313+2B7ToLAAAAAAAAAADgI8BHKQAAAAAAAAAAmBw+SgEAAAAAAAAAwOTwUQoAAAAAAAAAACYntndOKTHvlQjO8/oJyT26PCoNc3m+973vNcdUYu4E5fosrpwEJzZLJOaLLeScUj6ZMGU7XozrzYtEopcc620PiQyyVxA8lox4nmWPJTF0wmiNG6mgUUnkqytWrGiO6bOsWrWqyaMy1iNHjjR5Dh482BzTjSWcRD2Vlv//TP3+exnr+osdx+YpUR3rvESQ27sZRu/cZqy4kUhcb9++3RzTfnr58uUmj0rL33vvvSaP9n83jxpLau5Y7HkUzKZ3rE/6n45/SR9dsmRJdH1ty+53hOJ+D2j7T4TpVX5jCSURffcK0hf7N0IS23ol6spYZc+zPpKykzbTS+9Yp/fU+xslITln6dKlzTE3tml/T2KUixG6iQKicwAAAAAAAAAAuG/goxQAAAAAAAAAAEwOH6UAAAAAAAAAAGBy+CgFAAAAAAAAAACTE4vOF5tE/peeNytPr0QuuZ9ExufKcWJBFau9//77M8saSwZd1Ve3vfKzeQmj07LHvN6sclLRbPLexrrHseS3vVLJxZbRJ+04qaPesucpGk7a31i4OKYx0UkskzjmJKp6PSc6X758+SDtROfnz58fpI8ePdrkWVhYaI6pRPbhhx9u8uh9977rhDHb1ryuP89n6x1HEhltwtSx7X4QZPe8o7t37zbHjh8/3hzT9+TO0/53P9ZZ1b1531OOLfcDSdzojRHJpkauHBWiu81ItI+4cVwlymkcTzZMSuhta4lEfSwZeHJsrHn8mL8j7of59zyvP9ZvnbHmWknZbuMP12/1mNuMR3F9VOOGu1YC/5QCAAAAAAAAAIDJ4aMUAAAAAAAAAABMDh+lAAAAAAAAAABgcmKn1DzXcPYy1nr1ZC1w7/U1j/NFqUMlcapUtWs23Vpwt65cSZwuCVOv850XYzqmehxK6fU1n2sj81yL3rMWfqz18mk5Yzmt5unGGOv5py67p6wktozpj0s8fw8++OAgfePGjSbPwYMHB+kzZ85E19L7dN4/xa3FX2zv02IzT+9UT55eFttf2OOmcczTO5I867vvvhsdS8pO2lbiuVnsOukd2+DeYizvkPMXJmOUczPqMVe2jluuP+pYW9XOCdzzJ79Rknn0WE6v3jzu+j19cp5Oq16mLGesPFX9Tl9F3+1iO6Ucbm6pMSHpt0k/7nXD8U8pAAAAAAAAAACYHD5KAQAAAAAAAADA5PBRCgAAAAAAAAAAJoePUgAAAAAAAAAAMDkfSXTeK2hOyh6rnHmKHfV6TuyleZxoTO/RlZMIgl2eHvlaKsxOnj+5/ljci6LPsSSGY503Zh/pkZjfixJlpVfqPs+yF1uQOJZ83JWjMbF3o4VkE4nr1683eW7dujVInz17tslz+PDhQfru3btNnmXLls28J7cZhdIrVR6rTc5TdD/WZgiJwN7lSySmY9btWPTGiB4h7P0qw+6do95rot+k7N73P6Uwv5cx+9r92paVnhjlNjlyEnONkU5ifvPmzZnl6NjmxrpkbE9+R/X24+Q3kmNeMnJ3bMo86Xk94+iYfW/K31GOJCZpe596HtGzqZo7z+VRsfkDDzzQ5Ll9+3Z0n7Pgn1IAAAAAAAAAADA5fJQCAAAAAAAAAIDJ4aMUAAAAAAAAAABMTuyU6qVnXedYboQPKmtWnvSe9byxfCGpLyNxUT300EMfeo471luPvb6OxXaRjeXL6b1W7/P3tKV5rrPubTdjnPNB503ptHJl9zjdkrLT5xjr+XucAu6Yi23qlOr11yUOi2vXrjV53nrrrUH66tWrTZ533313kF66dOnMa1Vlvg4t2z2/lrPYTql59tFk/Ot1Srl2o3kSp2J6faV3HjOlr6j3nDHbRM/1p3Yqzot59r95Xn+e7bb3ee+1d5vg7rnHs+jKcWOk+hFdjFSH1J07d2Ze3/lz3XPoMXffek9JfSTl9F5/rDwflG8WadljXKtqvr6oHhbbH+2Ysk5658gOvW/Xt27cuDFIJ986nHcugX9KAQAAAAAAAADA5PBRCgAAAAAAAAAAJoePUgAAAAAAAAAAMDl8lAIAAAAAAAAAgMkZVXQ+ljB6TIlmUk6v2FGPObHf9773vUE6lY8pTqyayFZVWuaun9zTWBLjHmHjB10/ydMrlu1hymtV9YkNx5SoJmUnou+EXtHwWO9knsLWnrg5T9H0mMLasSTaKlbUuFqVxR+VildVnThxYmbZev2krbt7ev/995s8KoR84IEHZpbTK9p2LLboPJG4zzonvV7vZgiJjL+XsUS3Y503z7LHalvzHOuTNjrPeUxvOfPcaGRKie8829/9wFjjr25yVFV14MCB5th77703SLu2vX79+pn3o+Omllvl43aPaDyZ+6ZS8Z75T69UvFdQ3lN272/N5Hr3w2YcY24G1DMnSctJ5jI9c7QHH3wwupbObZINClasWNHkWbNmzSC9e/fumffo4J9SAAAAAAAAAAAwOXyUAgAAAAAAAACAyeGjFAAAAAAAAAAATE7slJpyDWmv06a37GS9ZrIWWd0g7jy3XjMpx3lOEs9O8mzqS3HluOdPfFU9vhDHWC6Kqb0DyVpsZbHdWPOk13uh5yVt3eUby42UlqPXH8vflp6XeL964l/6HpN6S/wsGjeTeFjV+plc/et5S5cubfLofTs31MMPP9wcS5xWy5YtG6STZ+ttI67+x4rRjrGcTr1OtaT/jzWO9tLrJ+nJ4+iJbem15jVuJ94Ld15y/SRGLfYYnfpyPi58nJ9tXqxcubI59uu//uvNMR3L3BiVuGGTuY7zTCXjv77/Xqebuyd9/rF+6/aW4+p/rLITXGz77ne/O9n1HfreXDtS0jnSWOO/vrfe3yi985/EX6q/9avauly+fHmTR+ekzld1586dQfrq1atNngT+KQUAAAAAAAAAAJPDRykAAAAAAAAAAJgcPkoBAAAAAAAAAMDk8FEKAAAAAAAAAAAm5xPfxyAIAAAAAAAAAAATwz+lAAAAAAAAAABgcvgoBQAAAAAAAAAAk8NHKQAAAAAAAAAAmBw+SgEAAAAAAAAAwOTwUQoAAAAAAAAAACaHj1IAAAAAAAAAADA5fJQCAAAAAAAAAIDJ4aMUAAAAAAAAAABMDh+lAAAAAAAAAABgcv4f8xCCtoIL9OAAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1200x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "check_data = first(train_loader)\n",
    "print(f\"batch shape: {check_data['image'].shape}\")\n",
    "image_visualisation = torch.cat(\n",
    "    [check_data[\"image\"][0, 0], check_data[\"image\"][1, 0], check_data[\"image\"][2, 0], check_data[\"image\"][3, 0]], dim=1\n",
    ")\n",
    "plt.figure(\"training images\", (12, 6))\n",
    "plt.imshow(image_visualisation, vmin=0, vmax=1, cmap=\"gray\")\n",
    "plt.axis(\"off\")\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d3090350",
   "metadata": {},
   "source": [
    "### Define network, scheduler, optimizer, and inferer\n",
    "At this step, we instantiate the MONAI components to create a DDPM, the UNET, the noise scheduler, and the inferer used for training and sampling. We are using\n",
    "the original DDPM scheduler containing 1000 timesteps in its Markov chain, and a 2D UNET with attention mechanisms\n",
    "in the 2nd and 3rd levels, each with 1 attention head."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "2c52e4f4",
   "metadata": {
    "lines_to_next_cell": 0,
    "tags": []
   },
   "outputs": [],
   "source": [
    "device = torch.device(\"cuda\")\n",
    "num_train_timesteps = 1000\n",
    "\n",
    "model = DiffusionModelUNet(\n",
    "    spatial_dims=2,\n",
    "    in_channels=1,\n",
    "    out_channels=1,\n",
    "    channels=(128, 256, 256),\n",
    "    attention_levels=(False, True, True),\n",
    "    num_res_blocks=1,\n",
    "    num_head_channels=256,\n",
    ")\n",
    "model.to(device)\n",
    "\n",
    "scheduler = DDPMScheduler(num_train_timesteps=num_train_timesteps)\n",
    "\n",
    "optimizer = torch.optim.Adam(params=model.parameters(), lr=2.5e-5)\n",
    "\n",
    "inferer = DiffusionInferer(scheduler)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5a316067",
   "metadata": {},
   "source": [
    "### Model training\n",
    "Here, we are training our model for 50 epochs (training time: ~33 minutes).\n",
    "\n",
    "If you would like to skip the training and use a pre-trained model instead, set `use_pretrained=True`. This model was trained using the code in `tutorials/generative/distributed_training/ddpm_training_ddp.py` of [GenerateModels](https://github.com/Project-MONAI/GenerativeModels)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "0f697a13",
   "metadata": {
    "lines_to_next_cell": 0,
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch 0: 100%|████████████| 63/63 [00:30<00:00,  2.04it/s, loss=0.739]\n",
      "Epoch 1: 100%|████████████| 63/63 [00:30<00:00,  2.08it/s, loss=0.287]\n",
      "Epoch 2: 100%|███████████| 63/63 [00:30<00:00,  2.07it/s, loss=0.0931]\n",
      "Epoch 3: 100%|███████████| 63/63 [00:30<00:00,  2.08it/s, loss=0.0356]\n",
      "Epoch 4: 100%|████████████| 63/63 [00:30<00:00,  2.09it/s, loss=0.021]\n",
      "...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch 45: 100%|█████████| 63/63 [00:30<00:00,  2.04it/s, loss=0.00993]\n",
      "Epoch 46: 100%|█████████| 63/63 [00:30<00:00,  2.03it/s, loss=0.00991]\n",
      "Epoch 47: 100%|█████████| 63/63 [00:30<00:00,  2.04it/s, loss=0.00917]\n",
      "Epoch 48: 100%|█████████| 63/63 [00:30<00:00,  2.05it/s, loss=0.00966]\n",
      "Epoch 49: 100%|█████████| 63/63 [00:30<00:00,  2.05it/s, loss=0.00987]\n",
      "100%|██████████| 1000/1000 [00:11<00:00, 84.10it/s]\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 200x200 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train completed, total time: 1671.551263332367.\n"
     ]
    }
   ],
   "source": [
    "use_pretrained = False\n",
    "\n",
    "if use_pretrained:\n",
    "    model = torch.hub.load(\"marksgraham/pretrained_generative_models:v0.2\", model=\"ddpm_2d\", verbose=True).to(device)\n",
    "else:\n",
    "    max_epochs = 50\n",
    "    val_interval = 5\n",
    "    epoch_loss_list = []\n",
    "    val_epoch_loss_list = []\n",
    "\n",
    "    scaler = GradScaler(\"cuda\")\n",
    "    total_start = time.time()\n",
    "    for epoch in range(max_epochs):\n",
    "        model.train()\n",
    "        epoch_loss = 0\n",
    "        progress_bar = tqdm(enumerate(train_loader), total=len(train_loader), ncols=70)\n",
    "        progress_bar.set_description(f\"Epoch {epoch}\")\n",
    "        for step, batch in progress_bar:\n",
    "            images = batch[\"image\"].to(device)\n",
    "            optimizer.zero_grad(set_to_none=True)\n",
    "\n",
    "            with autocast(device_type=\"cuda\", enabled=True):\n",
    "                # Generate random noise\n",
    "                noise = torch.randn_like(images).to(device)\n",
    "\n",
    "                # Create timesteps\n",
    "                timesteps = torch.randint(0, num_train_timesteps, (images.shape[0],), device=images.device).long()\n",
    "\n",
    "                # Get model prediction\n",
    "                noise_pred = inferer(inputs=images, diffusion_model=model, noise=noise, timesteps=timesteps)\n",
    "\n",
    "                loss = F.mse_loss(noise_pred.float(), noise.float())\n",
    "\n",
    "            scaler.scale(loss).backward()\n",
    "            scaler.step(optimizer)\n",
    "            scaler.update()\n",
    "\n",
    "            epoch_loss += loss.item()\n",
    "\n",
    "            progress_bar.set_postfix({\"loss\": epoch_loss / (step + 1)})\n",
    "        epoch_loss_list.append(epoch_loss / (step + 1))\n",
    "\n",
    "        if (epoch + 1) % val_interval == 0:\n",
    "            model.eval()\n",
    "            val_epoch_loss = 0\n",
    "            for step, batch in enumerate(val_loader):\n",
    "                images = batch[\"image\"].to(device)\n",
    "                with torch.no_grad(), autocast(device_type=\"cuda\", enabled=True):\n",
    "                    noise = torch.randn_like(images).to(device)\n",
    "                    timesteps = torch.randint(0, num_train_timesteps, (images.shape[0],), device=images.device).long()\n",
    "                    noise_pred = inferer(inputs=images, diffusion_model=model, noise=noise, timesteps=timesteps)\n",
    "                    val_loss = F.mse_loss(noise_pred.float(), noise.float())\n",
    "\n",
    "                val_epoch_loss += val_loss.item()\n",
    "                progress_bar.set_postfix({\"val_loss\": val_epoch_loss / (step + 1)})\n",
    "            val_epoch_loss_list.append(val_epoch_loss / (step + 1))\n",
    "\n",
    "            # Sampling image during training\n",
    "            noise = torch.randn((1, 1, 64, 64))\n",
    "            noise = noise.to(device)\n",
    "            scheduler.set_timesteps(num_inference_steps=1000)\n",
    "            with autocast(device_type=\"cuda\", enabled=True):\n",
    "                image = inferer.sample(input_noise=noise, diffusion_model=model, scheduler=scheduler)\n",
    "\n",
    "            plt.figure(figsize=(2, 2))\n",
    "            plt.imshow(image[0, 0].cpu(), vmin=0, vmax=1, cmap=\"gray\")\n",
    "            plt.tight_layout()\n",
    "            plt.axis(\"off\")\n",
    "            plt.show()\n",
    "\n",
    "    total_time = time.time() - total_start\n",
    "    print(f\"train completed, total time: {total_time}.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "057f0d69",
   "metadata": {},
   "source": [
    "### Get masked image for inpainting"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "2cdcda81",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAC8CAYAAADl2K3eAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB8LklEQVR4nO19ebRlVX3md+d7333v3TdXFRRjsIkoKy24QhAQcexIidoNBgdajDHYidj0inTbGESRIGpjQ4wDHW2cwGZBjJ2WpUbSOLWmV9oWiQyBYqaKqjffd+e5/6j+9vud39vn3HPuu6+qsPa31lv33XP22Weffff59m/avx3r9Xo9ODg4ODg4OByxiB/qBjg4ODg4ODgcWjhhwMHBwcHB4QiHEwYcHBwcHByOcDhhwMHBwcHB4QiHEwYcHBwcHByOcDhhwMHBwcHB4QiHEwYcHBwcHByOcDhhwMHBwcHB4QiHEwYcHBwcHByOcDyvhIGPfOQjiMViA1375S9/GbFYDE8++eRwGyXw5JNPIhaL4ctf/nJguR/84AeIxWL4wQ9+sGVtcXDYSnAM33XXXYe6KQ6HKQ7WGDn++ONx6aWX9i0Xi8XwkY98ZEvb8nzGQREGHnjgAbzjHe/A0UcfjUwmg6OOOgpvf/vb8cADDxyM2zs4/NqBwm0sFsNPfvKTDed7vR6OOeYYxGIx7Nq16xC00OFQwo0Ph6jYcmHgm9/8Jk477TT83d/9Hd71rnfhc5/7HN797nfj3nvvxWmnnYa//uu/Dl3Xn/7pn6JWqw3UjksuuQS1Wg3HHXfcQNcPEy9/+ctRq9Xw8pe//FA3xeF5jmw2i9tvv33D8R/+8Id49tlnkclkDkGrHA4XuPGxjlqthj/90z891M04bLGlwsBjjz2GSy65BCeeeCLuv/9+XHfddXj3u9+Nj33sY7j//vtx4okn4pJLLsHjjz8eWE+lUgEAJJNJZLPZgdqSSCSQzWYHdjMME/F4HNlsFvH488pL43AY4vWvfz3uvPNOtNttz/Hbb78dp59+OrZv336IWuZwOMCNj3Vks1kkk8lD3YzDFls6G33qU59CtVrFf/kv/wWzs7OeczMzM7jllltQqVTwyU9+0hxnXMCDDz6It73tbZicnMTZZ5/tOSdRq9Xw/ve/HzMzMxgbG8MFF1yAPXv2bPAP2WIGjj/+eOzatQs/+clP8Nu//dvIZrM48cQT8dWvftVzj+XlZXzgAx/AqaeeitHRUYyPj+N3f/d38ctf/nKgfrHFDLziFa/Ai1/8Ytx///0499xzMTIygpNOOsn42374wx/ijDPOQC6Xw8knn4x77rnHU+dTTz2FP/qjP8LJJ5+MXC6H6elpXHTRRdYYCd4jl8th586duO6663DrrbdaYyq+853v4JxzzkE+n8fY2BjOP/985945jPDWt74VS0tL+P73v2+ONZtN3HXXXXjb2962ofx/+k//CS972cswPT2NXC6H008/3erT/f73v4+zzz4bExMTGB0dxcknn4yrrroqsC2NRgO7du1CoVDAT3/6080/nMOmEXV8AAd/jHS7Xdx000140YtehGw2i23btuGyyy7DysqK59per4frrrsOO3fuxMjICM4777xIXKTnBM4njzzyCN7xjnegUChgdnYWV199NXq9Hp555hm88Y1vxPj4OLZv344bb7zRU1+z2cSHP/xhnH766SgUCsjn8zjnnHNw7733brj30tISLrnkEoyPj2NiYgLvfOc78ctf/tIaY/bwww/jwgsvxNTUFLLZLF760pfib/7mb0I/56DYUmHgf/yP/4Hjjz8e55xzjvX8y1/+chx//PG4++67N5y76KKLUK1Wcf311+M973mP7z0uvfRSfOYzn8HrX/96fOITn0Aul8P5558fuo27d+/GhRdeiNe85jW48cYbMTk5iUsvvdQzyB5//HF861vfwq5du/DpT38aV155Jf7xH/8R5557Lvbu3Rv6Xv2wsrKCXbt24YwzzsAnP/lJZDIZXHzxxbjjjjtw8cUX4/Wvfz1uuOEGVCoVXHjhhSiVSubaf/iHf8BPf/pTXHzxxfjzP/9zvPe978Xf/d3f4RWveAWq1aopt2fPHvMS/cf/+B/x7/7dv8Ntt92Gm2++eUN7vva1r+H888/H6OgoPvGJT+Dqq6/Ggw8+iLPPPntLAzEdwuP444/HmWeeiW984xvm2He+8x0Ui0VcfPHFG8rffPPNeMlLXoJrr70W119/PZLJJC666CLPO/jAAw9g165daDQauPbaa3HjjTfiggsuwP/6X//Ltx21Wg1veMMb8NOf/hT33HMPXvaylw33QR0GQtTxARz8MXLZZZfhyiuvxFlnnYWbb74Z73rXu3Dbbbfhda97HVqtlrn+wx/+MK6++mr81m/9Fj71qU/hxBNPxGtf+1pjOR4Uv/d7v4dut4sbbrgBZ5xxBq677jrcdNNNeM1rXoOjjz4an/jEJ3DSSSfhAx/4AH70ox+Z69bW1vDFL34Rr3jFK/CJT3wCH/nIR7CwsIDXve51uO+++0y5breLN7zhDfjGN76Bd77znfizP/szPPfcc3jnO9+5oS0PPPAAfud3fgcPPfQQPvjBD+LGG29EPp/Hm970pkgu9YHQ2yKsrq72APTe+MY3Bpa74IILegB6a2trvV6v17vmmmt6AHpvfetbN5TlOeLnP/95D0Dviiuu8JS79NJLewB611xzjTl266239gD0nnjiCXPsuOOO6wHo/ehHPzLH5ufne5lMpvcnf/In5li9Xu91Oh3PPZ544oleJpPpXXvttZ5jAHq33npr4DPfe++9PQC9e++91xw799xzewB6t99+uzn28MMP9wD04vF47+///u/N8e9973sb7lOtVjfc52c/+1kPQO+rX/2qOXb55Zf3YrFY7xe/+IU5trS01JuamvL0T6lU6k1MTPTe8573eOrct29fr1AobDjucHDB8fwP//APvb/4i7/ojY2NmTFw0UUX9c4777xer3dgjJ9//vnmOj1Oms1m78UvfnHvla98pTn2n//zf+4B6C0sLPjen2P4zjvv7JVKpd65557bm5mZ8Ywrh0OHQcdHr3dwx8iPf/zjHoDebbfd5rn2u9/9ruf4/Px8L51O984///xet9s15a666qoegN473/nOvn2i5wTOJ3/4h39ojrXb7d7OnTt7sVisd8MNN5jjKysrvVwu57lPu93uNRoNzz1WVlZ627Zt6/3+7/++OfZXf/VXPQC9m266yRzrdDq9V77ylRt4/FWvelXv1FNP7dXrdXOs2+32Xvayl/Ve8IIX9H3GzWDLLAPUWsfGxgLL8fza2prn+Hvf+96+9/jud78LAPijP/ojz/HLL788dDtPOeUUj+VidnYWJ598sieOIZPJGP9+p9PB0tKSMYv93//7f0Pfqx9GR0c90vrJJ5+MiYkJvPCFL8QZZ5xhjvN/2cZcLmf+b7VaWFpawkknnYSJiQlPG7/73e/izDPPxD//5//cHJuamsLb3/52T1u+//3vY3V1FW9961uxuLho/hKJBM444wyrKczh0OAtb3kLarUavv3tb6NUKuHb3/62rwlYjpOVlRUUi0Wcc845njEyMTEBAPjv//2/o9vtBt67WCzita99LR5++GH84Ac/8Iwrh8MDUcYHcHDHyJ133olCoYDXvOY1Hp45/fTTMTo6anjmnnvuQbPZxOWXX+5xFV9xxRUResKOP/iDPzD/JxIJvPSlL0Wv18O73/1uz/PqeSGRSCCdTgM4oP0vLy+j3W7jpS996QbOTaVSHgt3PB7HH//xH3vasby8jP/5P/8n3vKWt6BUKpm+WFpawute9zo8+uij2LNnz6af1w9bFk3BSV6asm3wExpOOOGEvvd46qmnEI/HN5Q96aSTQrfz2GOP3XBscnLS46/qdru4+eab8bnPfQ5PPPEEOp2OOTc9PR36Xv2wc+fODTERhUIBxxxzzIZjADxtrNVq+PjHP45bb70Ve/bsQa/XM+eKxaL5/6mnnsKZZ5654d66zx599FEAwCtf+UprW8fHx8M8ksNBwOzsLF796lfj9ttvR7VaRafTwYUXXmgt++1vfxvXXXcd7rvvPjQaDXNcjrvf+73fwxe/+EX8wR/8AT74wQ/iVa96Ff7lv/yXuPDCCzcEvV5xxRWo1+v4xS9+gRe96EVb84AOm0KU8QEc3DHy6KOPolgsYm5uztqW+fl5AAd4CwBe8IIXbHi2ycnJEL3gDz0HFAoFZLNZzMzMbDi+tLTkOfaVr3wFN954Ix5++GGPS0POSU899RR27NiBkZERz7Wac3fv3o1er4err74aV199tbWt8/PzOProo8M/XARsmTBQKBSwY8cO3H///YHl7r//fhx99NEbJhcpnW4lEomE9bicTK+//npcffXV+P3f/3187GMfw9TUFOLxOK644oq+UvEw2hKmjZdffjluvfVWXHHFFTjzzDNRKBQQi8Vw8cUXD9RGXvO1r33NGnHsonIPL7ztbW/De97zHuzbtw+/+7u/azQ3iR//+Me44IIL8PKXvxyf+9znsGPHDqRSKdx6662e5We5XA4/+tGPcO+99+Luu+/Gd7/7Xdxxxx145Stfib/927/1jMc3vvGN+G//7b/hhhtuwFe/+lW3QuYwRZjxARz8MdLtdjE3N4fbbrvN2h4deL4VsPFrGM79+te/jksvvRRvetObcOWVV2Jubg6JRAIf//jH8dhjj0VuBzn3Ax/4AF73utdZy0RRdKNiSxl9165d+Mu//Ev85Cc/MSsCJH784x/jySefxGWXXTZQ/ccddxy63S6eeOIJj8S4e/fugdtsw1133YXzzjsPX/rSlzzHV1dXN0iPhwp33XUX3vnOd3oiXuv1OlZXVz3ljjvuOGv/6GO/8Ru/AQCYm5vDq1/96uE32GGoePOb34zLLrsMf//3f4877rjDWuav/uqvkM1m8b3vfc+zvvzWW2/dUDYej+NVr3oVXvWqV+HTn/40rr/+enzoQx/Cvffe6xkPb3rTm/Da174Wl156KcbGxvD5z39++A/nsGmEGR/AwR8jv/Ebv4F77rkHZ511VqACyPwwjz76KE488URzfGFhYcOqg4OFu+66CyeeeCK++c1veqwm11xzjafccccdh3vvvRfVatVjHdCcy+dKpVKHhHO3VIy/8sorkcvlcNlll20wrywvL+O9730vRkZGcOWVVw5UP6Wnz33uc57jn/nMZwZrsA8SiYRHIgQO+Lq20n8TFbY2fuYzn/G4NIADffazn/3ME+26vLy8QTJ/3eteh/HxcVx//fUe8xexsLAwvMY7bBqjo6P4/Oc/j4985CN4wxveYC2TSCQQi8U8Y+LJJ5/Et771LU+55eXlDdfSzyvNxsS//tf/Gn/+53+OL3zhC/gP/+E/DP4QDluGMOMDOPhj5C1veQs6nQ4+9rGPbbim3W4bZebVr341UqkUPvOZz3h47qabbvJ9lq0GrQeyPf/7f/9v/OxnP/OU46qIv/zLvzTHut0uPvvZz3rKzc3N4RWveAVuueUWPPfccxvut9Wcu6WWgRe84AX4yle+gre//e049dRT8e53vxsnnHACnnzySXzpS1/C4uIivvGNbxgtNCpOP/10/Kt/9a9w0003YWlpCb/zO7+DH/7wh3jkkUcAYGgJhnbt2oVrr70W73rXu/Cyl70M//iP/4jbbrvNI6EeauzatQtf+9rXUCgUcMopp+BnP/sZ7rnnng0xDf/+3/97fP3rX8drXvMaXH755cjn8/jiF7+IY489FsvLy6bPxsfH8fnPfx6XXHIJTjvtNFx88cWYnZ3F008/jbvvvhtnnXUW/uIv/uJQPKqDD2xLlSTOP/98fPrTn8a/+Bf/Am9729swPz+Pz372szjppJM87rxrr70WP/rRj3D++efjuOOOw/z8PD73uc9h586dVgsfALzvfe/D2toaPvShD6FQKPRdb+5w8NFvfAAHf4yce+65uOyyy/Dxj38c9913H1772tcilUrh0UcfxZ133ombb74ZF154IWZnZ/GBD3wAH//4x7Fr1y68/vWvxy9+8Qt85zvfOWTW2V27duGb3/wm3vzmN+P888/HE088gS984Qs45ZRTUC6XTbk3velN+O3f/m38yZ/8CXbv3o3f/M3fxN/8zd8YgUrOU5/97Gdx9tln49RTT8V73vMenHjiidi/fz9+9rOf4dlnnx04t00YbLnj96KLLsJv/uZv4uMf/7gRAKanp3Heeefhqquuwotf/OJN1f/Vr34V27dvxze+8Q389V//NV796lfjjjvuwMknnzxwtkKNq666CpVKBbfffjvuuOMOnHbaabj77rvxwQ9+cCj1DwM333wzEokEbrvtNtTrdZx11lm45557NviejjnmGNx77714//vfj+uvvx6zs7P44z/+Y+Tzebz//e/39Nnb3vY2HHXUUbjhhhvwqU99Co1GA0cffTTOOeccvOtd7zrYj+iwSbzyla/El770Jdxwww244oorcMIJJ+ATn/gEnnzySQ/RX3DBBXjyySfxX//rf8Xi4iJmZmZw7rnn4qMf/agJXrXhqquuQrFYNGSvo6UdDn8cijHyhS98AaeffjpuueUWXHXVVUgmkzj++OPxjne8A2eddZa59rrrrkM2m8UXvvAF3HvvvTjjjDPwt3/7t5HyygwTl156Kfbt24dbbrkF3/ve93DKKafg61//Ou68805PQrlEIoG7774b//bf/lt85StfQTwex5vf/GZcc801OOusszyce8opp+D//J//g49+9KP48pe/jKWlJczNzeElL3kJPvzhD2/p88R62rb8a4D77rsPL3nJS/D1r399w5I5BzuuuOIK3HLLLSiXy77BMw4ODg4Ow8G3vvUtvPnNb8ZPfvITj9BzqPC8D/21bVx00003IR6Pu42AfKD7bGlpCV/72tdw9tlnO0HAwcHBYcjQnNvpdPCZz3wG4+PjOO200w5Rq7x43q8P++QnP4mf//znOO+885BMJvGd73wH3/nOd/CHf/iHG9bnOxzAmWeeiVe84hV44QtfiP379+NLX/oS1tbWfNe2Ojg4ODgMjssvvxy1Wg1nnnkmGo0GvvnNb+KnP/0prr/++oO2jL4fnvdugu9///v46Ec/igcffBDlchnHHnssLrnkEnzoQx9ya+F9cNVVV+Guu+7Cs88+i1gshtNO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",
      "text/plain": [
       "<Figure size 640x480 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "image_idx = 1\n",
    "\n",
    "val_batch = first(val_loader)[\"image\"]\n",
    "val_image = val_batch[image_idx, None, ...]\n",
    "\n",
    "mask = torch.ones_like(val_image)\n",
    "mask[:, :, 20:40, 30:80] = 0\n",
    "val_image_masked = val_image * mask\n",
    "\n",
    "# plot\n",
    "plt.subplot(1, 3, 1)\n",
    "plt.imshow(val_image[0, 0, ...], cmap=\"gray\")\n",
    "plt.title(\"Original image\")\n",
    "plt.axis(\"off\")\n",
    "plt.subplot(1, 3, 2)\n",
    "plt.imshow(mask[0, 0, ...], cmap=\"gray\")\n",
    "plt.axis(\"off\")\n",
    "plt.title(\"Mask\")\n",
    "plt.subplot(1, 3, 3)\n",
    "plt.imshow(val_image_masked[0, 0, ...], cmap=\"gray\")\n",
    "plt.axis(\"off\")\n",
    "plt.title(\"Masked image\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9128242f-8efd-486e-94d8-c060f1218983",
   "metadata": {},
   "source": [
    "### Inpaint\n",
    "Inpaint using Algorithm 1 in https://arxiv.org/pdf/2201.09865.\n",
    "\n",
    "`num_resample_steps` can be increased to improve the quality of inpainting, with an associated linear increase in inpainting time."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "1427e5d4",
   "metadata": {
    "lines_to_next_cell": 2,
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  0%|          | 0/1000 [00:00<?, ?it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 1000/1000 [01:27<00:00, 11.38it/s]\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAC8CAYAAADl2K3eAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAACvKElEQVR4nO29eZStRXU2/pzTp4fT83zv5V4mRVHULCNGg4IoKqgg4hcwjgE0Bo1R+Vb0+ynRiMoSh5g4ozEGnKMQY4xGRfIRjREzqkRQGa/AnXruPj33GX5/3O+pft7dVe9wuvt2Xzh7rbPOOe9Qb71VT+169q5dVblarVZDQxrSkIY0pCENechKfqsz0JCGNKQhDWlIQ7ZWGmSgIQ1pSEMa0pCHuDTIQEMa0pCGNKQhD3FpkIGGNKQhDWlIQx7i0iADDWlIQxrSkIY8xKVBBhrSkIY0pCENeYhLgww0pCENaUhDGvIQlwYZaEhDGtKQhjTkIS4NMtCQhjSkIQ1pyENcjioycOWVVyKXy9V173XXXYdcLoe9e/dubKZE9u7di1wuh+uuuy72un/+539GLpfDP//zP29aXhry4BBi5YYbbtjU55xwwgm45JJLEq/L5XK48sorNzUvDTn65Ejo13rkkksuwQknnJB43dOf/nQ8/elP3/T8bGc5ImTgtttuw8tf/nLs3r0bra2tOOaYY/Cyl70Mt91225F4fEMaUpdQweVyOfzwhz9cc75Wq+HYY49FLpfDeeedtwU5bMhDVYjN//zP/9zqrKxbbr/9dlx55ZXbjkg81GTTycDXvvY1POEJT8A//dM/4dJLL8UnPvEJvOpVr8LNN9+MJzzhCfi7v/u71Gm97W1vw8LCQl35eMUrXoGFhQUcf/zxdd2/kfK0pz0NCwsLeNrTnrbVWWlICmlra8OXvvSlNce///3v44EHHkBra+sW5GprZGFhAW9729u2OhsN2WayHv16++23453vfOeWkoEbb7wRN95445Y9fztIYTMTv/vuu/GKV7wCD3vYw/CDH/wAQ0ND7twb3/hGnHHGGXjFK16BW2+9FQ972MOC6czNzaGjowOFQgGFQn1ZbmpqQlNTU133brTk83m0tbVtdTYaklKe97zn4frrr8dHPvKRCP6+9KUv4dRTT8XY2NgW5u7ISgO3DfHJdtKv9UhLS8tWZ2HLZVM9Ax/4wAcwPz+Pv/zLv4wQAQAYHBzEpz71KczNzeH973+/O864gNtvvx0vfelL0dfXh9NPPz1yTmVhYQFveMMbMDg4iK6uLpx//vnYt2/fmrFN35jWCSecgPPOOw8//OEP8aQnPQltbW142MMehs997nORZ0xMTOBNb3oTHve4x6GzsxPd3d147nOfi5/97Gd1lYsvZuDpT386HvvYx+LWW2/FmWeeifb2dpx00klurPj73/8+nvzkJ6NYLOLkk0/GTTfdFEnz17/+Nf7wD/8QJ598MorFIgYGBnDRRRd52TafUSwWsWfPHlx11VW49tprvWN+3/72t3HGGWego6MDXV1dOPfccx9ywzsveclLMD4+ju9973vu2PLyMm644Qa89KUv9d7zZ3/2Z3jKU56CgYEBFItFnHrqqd5x/+9973s4/fTT0dvbi87OTpx88sm44oorYvOztLSE8847Dz09PfjRj34EAKhWq/jQhz6ExzzmMWhra8OOHTtw2WWXYXJyMnJvrVbDVVddhT179qC9vR3PeMYzMtWnbVdsk3fccQde/vKXo6enB0NDQ3j729+OWq2G+++/Hy94wQvQ3d2NnTt34oMf/GAkveXlZfzpn/4pTj31VPT09KCjowNnnHEGbr755jXPHh8fxyte8Qp0d3ejt7cXF198MX72s59543R++ctf4sILL0R/fz/a2trwxCc+Ed/4xjdSv+fRKJdccgk6Ozuxb98+XHDBBejs7MTQ0BDe9KY3oVKpuOsY2/Rnf/Zn+Iu/+Ascf/zxKBaLOPPMM/Hzn/88kuatt96KSy65BA972MPQ1taGnTt34pWvfCXGx8cj19WrX6+77jpcdNFFAIBnPOMZblhOdWNaHfT1r38dj33sY9HW1obHPvaxmbzONmaAOvqrX/0q3vnOd2L37t3o6urChRdeiOnpaSwtLeHyyy/H8PAwOjs7cemll2JpaSmS5rXXXouzzjoLw8PDaG1txSmnnIJrrrlmzbOr1SquvPJKHHPMMa5N3n777d44nqmpKVx++eU49thj0draipNOOgnve9/7UK1WU79rSDbVM/AP//APOOGEE3DGGWd4zz/taU/DCSecgG9961trzl100UV4xCMegfe85z2I22X5kksuwVe/+lW84hWvwG//9m/j+9//Ps4999zUebzrrrtw4YUX4lWvehUuvvhi/PVf/zUuueQSnHrqqXjMYx4DALjnnnvw9a9/HRdddBFOPPFEHDp0CJ/61Kdw5pln4vbbb8cxxxyT+nlxMjk5ifPOOw8vfvGLcdFFF+Gaa67Bi1/8Ynzxi1/E5Zdfjte85jV46Utfig984AO48MILcf/996OrqwsA8B//8R/40Y9+hBe/+MXYs2cP9u7di2uuuQZPf/rTcfvtt6O9vR0AsG/fPtfo3vrWt6KjowN/9Vd/5XV1f/7zn8fFF1+Mc845B+973/swPz+Pa665Bqeffjp+8pOfpArMeTDICSecgNNOOw1f/vKX8dznPhfAYQU1PT2NF7/4xfjIRz6y5p4Pf/jDOP/88/Gyl70My8vL+Ju/+RtcdNFF+OY3v+nwedttt+G8887Db/zGb+Bd73oXWltbcdddd+Ff//Vfg3lZWFjAC17wAvznf/4nbrrpJvzWb/0WAOCyyy7Dddddh0svvRRveMMbcO+99+JjH/sYfvKTn+Bf//Vf0dzcDAD40z/9U1x11VV43vOeh+c973n47//+b5x99tlYXl5eVxn97u/+Lh796Efjve99L771rW/hqquuQn9/Pz71qU/hrLPOwvve9z588YtfxJve9Cb81m/9lhsim5mZwV/91V/hJS95CV796lejVCrhM5/5DM455xz8+7//Ox7/+McDOKwwn//85+Pf//3f8drXvhaPetSj8Pd///e4+OKL1+Tltttuw1Of+lTs3r0bb3nLW9DR0YGvfvWruOCCC/C3f/u3eOELX7iud93OUqlUcM455+DJT34y/uzP/gw33XQTPvjBD+LhD384Xvva10au/dznPodSqYTXve51WFxcxIc//GGcddZZ+J//+R/s2LEDwGGyes899+DSSy/Fzp07cdttt+Ev//Ivcdttt+HHP/5xYkB3kn592tOehje84Q34yEc+giuuuAKPfvSjAcB9p9VBN954I37nd34Hp5xyCq6++mqMj4/j0ksvxZ49e9ZVnldffTWKxSLe8pa34K677sJHP/pRNDc3I5/PY3JyEldeeSV+/OMf47rrrsOJJ56IP/3TP3X3XnPNNXjMYx6D888/H4VCAf/wD/+AP/zDP0S1WsXrXvc6d91b3/pWvP/978fzn/98nHPOOfjZz36Gc845B4uLi5G8zM/P48wzz8S+fftw2WWX4bjjjsOPfvQjvPWtb8WBAwfwoQ99aF3vitomydTUVA1A7QUveEHsdeeff34NQG1mZqZWq9Vq73jHO2oAai95yUvWXMtzlP/6r/+qAahdfvnlkesuueSSGoDaO97xDnfs2muvrQGo3Xvvve7Y8ccfXwNQ+8EPfuCOjYyM1FpbW2t//Md/7I4tLi7WKpVK5Bn33ntvrbW1tfaud70rcgxA7dprr41955tvvrkGoHbzzTe7Y2eeeWYNQO1LX/qSO/bLX/6yBqCWz+drP/7xj93x7373u2ueMz8/v+Y5t9xySw1A7XOf+5w79vrXv76Wy+VqP/nJT9yx8fHxWn9/f6R8SqVSrbe3t/bqV786kubBgwdrPT09a44/GIWY+Y//+I/axz72sVpXV5cr54suuqj2jGc8o1arHcbRueeeG7nX1sfy8nLtsY99bO2ss85yx/7iL/6iBqA2OjoazAOxcv3119dKpVLtzDPPrA0ODkbq71/+5V9qAGpf/OIXI/d+5zvfiRwfGRmptbS01M4999xatVp1111xxRU1ALWLL744sUxsu2Kb/IM/+AN3rFwu1/bs2VPL5XK19773ve745ORkrVgsRp5TLpdrS0tLkWdMTk7WduzYUXvlK1/pjv3t3/5tDUDtQx/6kDtWqVRqZ5111pq28MxnPrP2uMc9rra4uOiOVavV2lOe8pTaIx7xiMR3PBpEsUm5+OKLawAiOqlWq9V+8zd/s3bqqae6/9RTxWKx9sADD7jj//Zv/1YDUPvf//t/u2M+vfLlL395jd5cj369/vrr1+jDWi2bDnr84x9f27VrV21qasodu/HGG2sAascff/yad7By5pln1s4880z3n+3usY99bG15edkdf8lLXlLL5XK15z73uZH7TzvttDXP8ZXdOeecU3vYwx4WeZdCoVC74IILItddeeWVa9rku9/97lpHR0ftjjvuiFz7lre8pdbU1FS77777Et8zTjZtmKBUKgGAs1xDwvMzMzOR4695zWsSn/Gd73wHAPCHf/iHkeOvf/3rU+fzlFNOiXguhoaGcPLJJ+Oee+5xx1pbW5HPHy6qSqWC8fFx59L97//+79TPSpLOzk68+MUvdv9PPvlk9Pb24tGPfjSe/OQnu+P8rXksFovu98rKCsbHx3HSSSeht7c3ksfvfOc7OO2005zFBQD9/f142cteFsnL9773PUxNTeElL3kJxsbG3KepqQlPfvKTvW7cB7O86EUvwsLCAr75zW+iVCrhm9/8ZnCIAIjWx+TkJKanp3HGGWdE6qK3txcA8Pd///eJbr7p6WmcffbZ+OUvf4l//ud/jtTf9ddfj56eHjz72c+O1NWpp56Kzs5OV1c33XQTlpeX8frXvz5i0V1++eUZSsIvv//7v+9+NzU14YlPfCJqtRpe9apXRd7Xtq2mpiY3XlutVjExMYFyuYwnPvGJa3Db3NyMV7/61e5YPp+PWFjA4SG9//t//y9e9KIXoVQqubIYHx/HOeecgzvvvBP79u1b9/tuZ7G684wzzoiUOeWCCy7A7t273f8nPelJePKTn4x//Md/dMcUx4uLixgbG8Nv//ZvA0Aq3ZdGv4YkrQ46cOAAfvrTn+Liiy9GT0+Pu//Zz342TjnllMTnxMnv/d7vOa8acFj31mo1vPKVr4xc9+QnPxn3338/yuWyO6ZlNz09jbGxMZx55pm45557MD09DQD4p3/6J5TL5VR92PXXX48zzjgDfX19kfJ41rOehUqlgh/84AfretdNGyZgJ09SEJIQaTjxxBMTn/HrX/8a+Xx+zbUnnXRS6nwed9xxa4719fVFxlqr1So+/OEP4xOf+ATuvffeyPjbwMBA6mclyZ49e9a43Xp6enDssceuOQYgkseFhQVcffXVuPbaa7Fv377I0AqBBxwus9NOO23Ns22Z3XnnnQCAs846y5vX7u7uNK/0oJGhoSE861nPwpe+9CXMz8+jUqngwgsvDF7/zW9+E1dddRV++tOfRsYStX5/93d/F3/1V3+F3//938db3vIWPPOZz8T/+l//CxdeeKEjn5TLL78ci4uL+MlPfuKGryh33nknpqenMTw87M3LyMgIgMN1DwCPeMQj1rxbX19filIIi21HPT09aGtrw+Dg4Jrjdrz5s5/9LD74wQ/il7/8JVZWVtxxbde//vWvsWvXLjfcRbG4veuuu1Cr1fD2t78db3/72715HRkZiXSCDyZpa2tbE59l9RnF4gAAHvnIR+KrX/2q+z8xMYF3vvOd+Ju/+RuHI4rqlZCk0a8hSauDQrgGsG6DzYdrAF6dXK1WMT097fqEf/3Xf8U73vEO3HLLLZifn49cPz09jZ6eHpd3i+P+/v41bfLOO+/ErbfeuqZ+KbZ+ssqmkYGenh7s2rULt956a+x1t956K3bv3r2mc1FWtZkSioDVzvQ973kP3v72t+OVr3wl3v3ud6O/vx/5fB6XX375hgRuJOUlTR5f//rX49prr8Xll1+O0047DT09Pcjlcnjxi19cVx55z+c//3ns3Llzzfl6Z3UczfLSl74Ur371q3Hw4EE897nPdZa9lX/5l3/B+eefj6c97Wn4xCc+gV27dqG5uRnXXnttZIpisVjED37wA9x888341re+he985zv4yle+grPOOgs33nhjpN5f8IIX4G/+5m/w3ve+F5/73OciZKFarWJ4eBhf/OIXvfkJKY+NFB9G0+D2C1/4Ai655BJccMEFePOb34zh4WE0NTXh6quvxt133505H8Ttm970Jpxzzjnea7IYC0ebbHRE/4te9CL86Ec/wpvf/GY8/vGPR2dnJ6rVKp7znOek0itpMBCS7aCD6tXJd999N575zGfiUY96FP78z/8cxx57LFpaWvCP//iP+Iu/+Iu6dfKzn/1s/J//83+85x/5yEdmTlNlU0vzvPPOw6c//Wn88Ic/dDMCVP7lX/4Fe/fuxWWXXVZX+scffzyq1SruvffeCCu866676s6zT2644QY84xnPwGc+85nI8ampqTWWz1bJDTfcgIsvvjgSrb24uIipqanIdccff7y3fOyxhz/84QCA4eFhPOtZz9r4DB+F8sIXvhCXXXYZfvzjH+MrX/lK8Lq//du/RVtbG7773e9GAjOvvfbaNdfm83k885nPxDOf+Uz8+Z//Od7znvfgT/7kT3DzzTdHyv2CCy7A2WefjUsuuQRdXV2RqOSHP/zhuOmmm/DUpz41lkRzDvidd94Zmco7OjqaylLbDLnhhhvwsIc9DF/72tciXpN3vOMdkeuOP/543HzzzZifn494Byxu+V7Nzc0N3CYILW+VO+64wwXlTU5O4p/+6Z/wzne+MxIY57tvPRIKQkyrgxTXVn71q19tQA6zyz/8wz9gaWkJ3/jGNyLeBTu8yrzfddddEU/Y+Pj4mjb58Ic/HLOzs5uG602dWvjmN78ZxWIRl1122RrX4MTEBF7zmtegvb0db37zm+tKn8z/E5/4ROT4Rz/60foyHJCmpqY1TPb666/fVmOPvjx+9KMfjQxpAIfL7JZbbsFPf/pTd2xiYmKNVXnOOeegu7sb73nPeyKuW8ro6OjGZf4okc7OTlxzzTW48sor8fznPz94XVNTE3K53JrpXF//+tcj101MTKy5l7EAdpoScHj88iMf+Qg++clP4v/7//4/d/xFL3oRKpUK3v3ud6+5p1wuO0L4rGc9C83NzfjoRz8awcq6o5DXIbSwND//9m//hltuuSVy3TnnnIOVlRV8+tOfdseq1So+/vGPR64bHh7G05/+dHzqU5/CgQMH1jzvoYjbkHz961+P6LB///d/x7/927+5GTO+ugE2Hi8dHR0AsMZwSauDdu3ahcc//vH47Gc/Gxm6+N73vofbb799Q/OaVnxlNz09vcYgeOYzn4lCobBmyuHHPvaxNWm+6EUvwi233ILvfve7a85NTU1F4hXqkU31DDziEY/AZz/7WbzsZS/D4x73OLzqVa/CiSeeiL179+Izn/kMxsbG8OUvf9kxwKxy6qmn4nd+53fwoQ99COPj425q4R133AEgzDizynnnnYd3vetduPTSS/GUpzwF//M//4MvfvGLsQslHWk577zz8PnPfx49PT045ZRTcMstt+Cmm25aE9Pwf/7P/8EXvvAFPPvZz8brX/96N7XwuOOOw8TEhCuz7u5uXHPNNXjFK16BJzzhCXjxi1+MoaEh3HffffjWt76Fpz71qV7APtjFN5XNyrnnnos///M/x3Oe8xy89KUvxcjICD7+8Y/jpJNOigybvetd78IPfvADnHvuuTj++OMxMjKCT3ziE9izZ4/XkwYAf/RHf4SZmRn8yZ/8CXp6enDFFVfgzDPPxGWXXYarr74aP/3pT3H22WejubkZd955J66//np8+MMfxoUXXujmnF999dU477zz8LznPQ8/+clP8O1vf3vLPFznnXcevva1r+GFL3whzj33XNx777345Cc/iVNOOQWzs7PuugsuuABPetKT8Md//Me466678KhHPQrf+MY3HKHStv7xj38cp59+Oh73uMfh1a9+NR72sIfh0KFDuOWWW/DAAw/UvT7Ig01OOukknH766Xjta1+LpaUlfOhDH8LAwIBzQ3d3d+NpT3sa3v/+92NlZQW7d+/GjTfeiHvvvXdD8/H4xz8eTU1NeN/73ofp6Wm0tra6+flpddDVV1+Nc889F6effjpe+cpXYmJiAh/96EfxmMc8JoKjIyVnn302Wlpa8PznPx+XXXYZZmdn8elPfxrDw8MRkrpjxw688Y1vxAc/+EGcf/75eM5znoOf/exnrk0qrt/85jfjG9/4Bs477zw3PXNubg7/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",
      "text/plain": [
       "<Figure size 640x480 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model.eval()\n",
    "mask = mask.to(device)\n",
    "val_image_masked = val_image_masked.to(device)\n",
    "timesteps = torch.Tensor((999,)).to(noise.device).long()\n",
    "val_image_inpainted = torch.randn((1, 1, 64, 64)).to(device)\n",
    "\n",
    "scheduler.set_timesteps(num_inference_steps=1000)\n",
    "progress_bar = tqdm(scheduler.timesteps)\n",
    "\n",
    "num_resample_steps = 4\n",
    "with torch.no_grad():\n",
    "    with autocast(device_type=\"cuda\", enabled=True):\n",
    "        for t in progress_bar:\n",
    "            for u in range(num_resample_steps):\n",
    "                # get the known portion at t-1\n",
    "                if t > 0:\n",
    "                    noise = torch.randn((1, 1, 64, 64)).to(device)\n",
    "                    timesteps_prev = torch.Tensor((t - 1,)).to(noise.device).long()\n",
    "                    val_image_inpainted_prev_known = scheduler.add_noise(\n",
    "                        original_samples=val_image_masked, noise=noise, timesteps=timesteps_prev\n",
    "                    )\n",
    "                else:\n",
    "                    val_image_inpainted_prev_known = val_image_masked\n",
    "\n",
    "                # perform a denoising step to get the unknown portion at t-1\n",
    "                if t > 0:\n",
    "                    timesteps = torch.Tensor((t,)).to(noise.device).long()\n",
    "                    model_output = model(val_image_inpainted, timesteps=timesteps)\n",
    "                    val_image_inpainted_prev_unknown, _ = scheduler.step(model_output, t, val_image_inpainted)\n",
    "\n",
    "                # combine known and unknown using the mask\n",
    "                val_image_inpainted = torch.where(\n",
    "                    mask == 1, val_image_inpainted_prev_known, val_image_inpainted_prev_unknown\n",
    "                )\n",
    "\n",
    "                # perform resampling\n",
    "                if t > 0 and u < (num_resample_steps - 1):\n",
    "                    # sample x_t from x_t-1\n",
    "                    noise = torch.randn((1, 1, 64, 64)).to(device)\n",
    "                    val_image_inpainted = (\n",
    "                        torch.sqrt(1 - scheduler.betas[t - 1]) * val_image_inpainted\n",
    "                        + torch.sqrt(scheduler.betas[t - 1]) * noise\n",
    "                    )\n",
    "\n",
    "\n",
    "# plot\n",
    "plt.subplot(1, 3, 1)\n",
    "plt.imshow(val_image[0, 0, ...].cpu(), cmap=\"gray\")\n",
    "plt.title(\"Original image\")\n",
    "plt.axis(\"off\")\n",
    "plt.subplot(1, 3, 2)\n",
    "plt.imshow(val_image_masked[0, 0, ...].cpu(), cmap=\"gray\")\n",
    "plt.axis(\"off\")\n",
    "plt.title(\"Masked image\")\n",
    "plt.subplot(1, 3, 3)\n",
    "plt.imshow(val_image_inpainted[0, 0, ...].cpu(), cmap=\"gray\")\n",
    "plt.axis(\"off\")\n",
    "plt.title(\"Inpainted image\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1c45cead",
   "metadata": {},
   "source": [
    "### Cleanup data directory\n",
    "\n",
    "Remove directory if a temporary was used."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "bab2d719",
   "metadata": {},
   "outputs": [],
   "source": [
    "if directory is None:\n",
    "    shutil.rmtree(root_dir)"
   ]
  }
 ],
 "metadata": {
  "jupytext": {
   "formats": "ipynb,py:percent"
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
